Предупреждение NuGet NU5128
Сценарий 1
Некоторые целевые платформы, объявленные в группе зависимостей nuspec и папке lib/ref, не имеют точных совпадений в другом расположении. Ознакомьтесь со списком действий ниже.
- Добавьте группу зависимостей для . NETStandard2.0 в nuspec
Проблема
ref/<tfm>/
Каталог lib/<tfm>/
в пакете содержит по крайней мере один файл для Moniker Целевой платформы (TFM), указанный в сообщении предупреждения. Однако для этого TFM в nuspec
файле не существует группы зависимостей. Это может привести к тому, что потребители пакетов считают, что пакет несовместим с TFM, даже если пакет не имеет зависимостей. Если пакет имеет необъявленные зависимости, проект, использующий пакет, будет испытывать ошибки среды выполнения.
Решение
- Запуск целевого объекта пакета NuGet в проекте
По возможности используйте целевой объект пакета MSBuild NuGet, так как он автоматически сопоставляет сборки TFM с группами зависимостей из целевых платформ проекта. Обратите внимание, что проект должен использовать PackageReference
для собственных зависимостей NuGet. Если в проекте используется packages.config, необходимо использовать nuget.exe pack
и nuspec
файл.
- Измененный
nuspec
вручную файл
Если вы используете пользовательский nuspec
файл, рекомендуется использовать каждый TFM, для которого lib/
или ref/
сборки существуют, должны иметь соответствующую группу зависимостей, даже если зависимости совпадают со следующим совместимым TFM. Например, если пакет содержит netstandard1.0
и netstandard2.0
сборки, а зависимости одинаковы для обоих, рекомендуется указывать оба TFM в качестве групп зависимостей с повторяющимися элементами зависимостей.
Обратите внимание, что идентификатор TFM, используемый в путях сборки, использует другой формат идентификатора TFM, используемого в группах зависимостей. Предупреждение указывает правильное имя, используемое в группе зависимостей. Если пакет не имеет зависимостей для этой целевой платформы, используйте пустую группу. Например:
<package>
<metadata>
...
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
...
</package>
lib/
Удаление илиref/
файлы
Если вы не хотите, чтобы ваш пакет был совместим с сообщаемой платформой TFM, измените проект таким образом, что нет lib/<tfm>/
или ref/<tfm>/
файлы находятся в пакете для этого TFM. Например, если предупреждение добавляет в пакет группу .NETFramework4.7.2
nuspec
зависимостей, удалите все lib/net472/*
ref/net472/*
и файлы из пакета.
Сценарий 2
Некоторые целевые платформы, объявленные в группе зависимостей nuspec и папке lib/ref, не имеют точных совпадений в другом расположении. Ознакомьтесь со списком действий ниже.
- Добавление сборок lib или ref для целевой платформы netstandard2.0
Проблема
Файл nuspec
имеет группу зависимостей для указанного Moniker Целевой платформы (TFM), но для этого TFM не существуют сборки либо lib/
ref/
. Если есть сборки для совместимого TFM, пакет по-прежнему установится, но зависимости могут быть неверными для сборок, используемых во время компиляции, и может привести к сбою проекта во время выполнения.
Решение
- Запуск целевого объекта пакета NuGet в проекте
По возможности используйте целевой объект пакета MSBuild NuGet, так как он автоматически сопоставляет сборки TFM с группами зависимостей из целевых платформ проекта. Обратите внимание, что проект должен использовать PackageReference
для собственных зависимостей NuGet. Если в проекте используется packages.config, необходимо использовать nuget.exe pack
и nuspec
файл.
- Редактирование
nuspec
файла вручную
Добавьте сообщаемый TFM в качестве дополнительной целевой платформы, для которой выполняется компиляция проекта, и добавьте сборки в пакет. Если вы используете проект стиля пакета SDK для нескольких целевых TFM, целевые объекты пакета NUGet MSBuild могут автоматически добавлять сборки в правильную lib/<tfm>/
папку и создавать группы зависимостей с правильными TFM и зависимостями. Если вы используете проект стилей, отличный от пакета SDK, скорее всего, потребуется создать дополнительный файл проекта для дополнительного TFM и изменить nuspec
файл, чтобы скопировать выходные сборки в правильном расположении пакета.
- Добавление пустого
_._
файла
Если пакет не содержит сборок, таких как метапакет, рассмотрите возможность добавления пустого _._
файла в lib/<tfm>/
каталоги для TFMs, перечисленных в сообщении предупреждения. Например, если предупреждение сообщает о добавлении сборок для целевой netstandard2.0
платформы, создайте пустой lib/netstandard2.0/_._
файл в пакете.
- Удаление группы зависимостей
Если вы используете пользовательский nuspec
файл, удалите группу зависимостей для сообщаемого TFM, оставив только группы зависимостей для TFMs, для которых lib/<tfm>/
существуют или ref/<tfm>/
файлы.
- Удалите все зависимости для пакетов, которые не связаны с сборками
Если пакет не содержит никаких lib/
или ref/
файлов и не является метапакетом, скорее всего, не имеет зависимостей, необходимых потребителю пакета. Если вы упаковываете целевой объект пакета MSBuild NuGet, вы можете задать <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
любой PropertyGroup
из файлов проекта. Если вы используете пользовательский nuspec
файл, удалите <dependencies>
элемент.
- Другие сценарии
Это предупреждение было добавлено во время разработки NuGet 5.3 и впервые было доступно в пакете SDK для .NET Core 3.0 ( предварительная версия 9). NuGet/Home#8583 отслеживает проблему, из-за которой предупреждение было создано в слишком многих сценариях. Свойство MSBuild можно использовать (добавить <NoWarn>$(NoWarn);NU5128</NoWarn>
в любой NoWarn
PropertyGroup
файл проекта). При наличии нескольких затронутых проектов можно использовать Directory.Build.targets
для автоматического добавления NoWarn
во все проекты.