Предупреждение NuGet NU5128
Сценарий 1
Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below: - Add a dependency group for .NETStandard2.0 to the 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
Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below: - Add lib or ref assemblies for the netstandard2.0 target framework
Проблема
Файл 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
во все проекты.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по