Поделиться через


Предупреждение 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.2nuspecзависимостей, удалите все 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> в любой NoWarnPropertyGroup файл проекта). При наличии нескольких затронутых проектов можно использовать Directory.Build.targets для автоматического добавления NoWarn во все проекты.