Как предотвратить установку пакетов 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 ответа:
, Если вы хотите быть на 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>