Как предотвратить установку пакетов nuget, которые не являются 100%.Net ядро 2.0 совместимо?


Я понимаю, что .Net Core 2 имеет оболочку совместимости, которая позволяет ему использовать пакеты Nuget, которые специально не предназначены для .Net Core / Standard 2. Это дает ему доступ к 70% Nuget. Отличная-приятная особенность.

Как предотвратить установку пакетов nuget, которые не полностью совместимы с .Net Core 2 / .Net Standard 2? Или предупредите меня в момент установки, что он используется с прокладкой?

Я создал новый проект .Net Core 2.0, установил EF 6.1.3 (который, как я знал, не работал) и ничто не помешало мне или предупредило, что он не нацелен на .Net Standard

Я рад "работать с ножницами", но я чувствую, что должен получить предупреждение, прежде чем устанавливать MVC5 и EF 6.1.3 в приложение .Net Core 2. Я бы очень хотел, чтобы младшие разработчики не устанавливали неподдерживаемые пакеты и т. д.

Я предполагаю, что дальше к ответу Мэтта Уорда - мой главный вопрос - Можно ли обнаружить, что что-то действительно совместимо на 100% при установке или мы всегда только в той ситуации, когда нам самим нужно определиться, что пакет работает "достаточно хорошо". Я надеялся, что существует технический механизм, который обнаруживает недостающее покрытие API покрытия и может сказать нам, что пакет nuget может не работать, как это было раньше. Поэтому я думаю, что MS говорит о совместимости 70% - я хочу потерпеть неудачу, если я попытаюсь установить 30%

2 9

2 ответа:

, Если вы хотите быть на 100% уверены, запустите пакет против .Чистая анализатор переносимости и .Чистый стандартный профиль 2.0.

Он не скажет вам, будет ли вызван API или нет (и никоим образом не является автоматическим процессом), просто если сборка содержит какой-либо API, который не совместим с .NET Standard 2.0.

Однако вы также можете запустить только ваше приложение против анализатора, так как анализатор переносимости .NET должен быть в состоянии следовать любым ссылкам, сделанным из приложение и проверить их тоже.

Обновление

Вы также можете встроить это в конвейер сервера сборки, чтобы получить более автоматические гарантии.

Интернет .Чистая портативность анализатора документы.

Visual Studio для этого не требуется, просто загрузите его из https://github.com/Microsoft/dotnet-apiport/releases и бежать

Из документов:

  • введите следующую команду для анализа текущего каталога: \...\ApiPort.exe analyze -f .
  • проанализировать конкретный список .dll файлы, введите следующую команду: \...\ApiPort.exe analyze -f first.dll -f second.dll -f third.dll

Старый ответ (может быть полезен в сочетании с ответом Мэтта)

Непроверено, но попробуйте:

<!-- old dotnet tooling/.NET Core 1.x -->
<PackageTargetFallback>netstandard2.0;portable-net45+win8</PackageTargetFallback>
<!-- new dotnet tooling/.NET Core 2.0 -->
<AssetTargetFallback>netstandard2.0;portable-net45+win8</AssetTargetFallback>

Обычно вы хотите, чтобы это было похоже на

<!-- old dotnet tooling/.NET Core 1.x -->
<PackageTargetFallback>$(PackageTargetFallback);dotnet5.6;portable-net45+win8</PackageTargetFallback>
<!-- new dotnet tooling/.NET Core 2.0 -->
<AssetTargetFallback>$(AssetTargetFallback);dotnet5.6;portable-net45+win8</AssetTargetFallback>

Где $(PackageTargetFallback) скажет MSBuild сохранить старые значения и добавить значения после этого к нему. Но так как $(PackageTargetFallback) вероятно (не могу смотреть / копать глубже прямо сейчас) есть прозвище .NET Framework там, вы переопределите его своими собственными значениями.

Дополнительно

Учитывая, что PackageTargetFallback теперь устарело, вместо него следует использовать AssetTargetFallback.

Установка Entity Framework 6.1.3 в проект .NET Core 2.0 в окне ошибок появляется предупреждение NU1701 о том, что Entity Framework 6.1.3 восстанавливается с помощью .NET Framework 4.6.1 и что он может быть не полностью совместим.

Вы можете превратить предупреждение NU1701 в ошибку в проекте, так что вы не можете установить любой пакет NuGet, который явно не поддерживает .NET Core 2.0. Это можно сделать, добавив свойство WarningAsErrors в проект.

<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>netcoreapp2.0</TargetFramework>
  <WarningsAsErrors>NU1701</WarningsAsErrors>
</PropertyGroup>

Тогда, если вы попробуйте установить Entity Framework 6.1.3 восстановление завершится ошибкой, изменения будут откатаны, а пакет NuGet не будет установлен.

Можно также задать свойству DisableImplicitAssetTargetFallback значение true, что предотвратит добавление .NET 4.6.1 к свойству AssetTargetFallback, которое используется при проверке совместимости пакета NuGet с проектами .NET Core 2.0.

<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>netcoreapp2.0</TargetFramework>
  <DisableImplicitAssetTargetFallback>true</DisableImplicitAssetTargetFallback>
</PropertyGroup>