Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Сценарий 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 во все проекты.