NuGet PackageReference не совместим с текущей версией фреймворка - PullRequest
0 голосов
/ 31 мая 2019

Я работаю над тем, чтобы переместить ссылки NuGet из формата packages.json в PackageReferences. У меня проблема с совместимостью пакета NuGet: пакет поддерживает более старую версию .NET Framework.

Это, используя формат packages.json, работает просто отлично.

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="MarkdownDeep.NET-Signed" version="1.5" targetFramework="net461" />
</packages>

<Reference Include="MarkdownDeep, Version=1.5.5082.29984, Culture=neutral, PublicKeyToken=65640b2d9fe5ac0e, processorArchitecture=MSIL">
  <HintPath>..\..\packages\MarkdownDeep.NET-Signed.1.5\lib\.NetFramework 3.5\MarkdownDeep.dll</HintPath>
  <Private>True</Private>
</Reference>

Однако замена этой инструкции на PackageReference в файле .csproj приводит к следующей ошибке:

<PackageReference Include="MarkdownDeep.NET-Signed">
  <Version>1.5</Version>
</PackageReference>

"C: \ Source \ WebApp.csproj" (цель восстановления) (1) -> (цель восстановления) -> C: \ Source \ WebApp.csproj: ошибка NU1202: пакет MarkdownDeep.NET-Signed 1.5.0 не совместим с net472 (.NETFramework, версия = v4.7.2). Пакет MarkdownDeep.NET-Signed 1.5.0 поддерживает: netframework35 (.NetFramework 3.5, версия = v0.0)

Обратите внимание, что текущая целевая структура в обоих случаях одинакова, v4.7.2.

Существуют ли какие-либо дополнительные инструкции для добавления к узлу <PackageReference>, которые позволят мне указать, что это нормально для целевой платформы .NET Framework 3.5?

Примечание: В есть некоторая полезная информация о ссылках на пакеты (PackageReference) в файлах проекта , но кажется, что она имеет дело только с TargetFramework в качестве переменной для условного добавления ссылок. Я не думаю, что у меня есть смесь версий .NET Framework - это всего лишь v4.7.2.

1 Ответ

0 голосов
/ 01 июня 2019

Я работаю в команде NuGet всего несколько месяцев, поэтому я не считаю себя экспертом по всем вопросам NuGet, но я бы предположил, что пакет MarkdownDeep.NET-Signed может быть создан неправильно.

Из вашего образца, скопированного с csproj с использованием packages.config, вы можете увидеть, что пакет содержит папку lib\.NetFramework 3.5\. Однако в пакетах NuGet обычно используется краткая форма lib\net35\. После быстрого тестирования создания консольного приложения, обращения к пакету NuGet.Frameworks и последующего использования NuGetFramework.Parse(".NetFramework 3.5"), полученный объект имеет «неподдерживаемую» структуру. NuGet Package Explorer (доступный в Магазине Microsoft) является сторонним приложением, поэтому не гарантируется, что он будет работать так же, как NuGet в VS, но он также отображает .NetFramework 3.5 как «Нераспознанная структура», предоставляя дополнительные доказательства того, что это может быть неправильно созданный пакет.

Учитывая, что пакет не выглядит правильным, для NuGet допустимо неудачное восстановление с помощью PackageReference, поскольку NuGet отвечает за выбор ресурсов из пакета, совместимых с вашим проектом. Я не знаю, почему установка пакета в packages.config проекте работает.

Если вы просто ищете анализатор уценки .NET, из того, что я могу сказать, markdig - самый популярный и все еще поддерживаемый пакет, доступный на nuget.org.

...