Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В дополнение к более традиционным сборкам пакеты NuGet иногда могут добавлять пользовательские целевые объекты сборки или свойства в проекты, использующие этот пакет.
Это можно сделать, добавив допустимый MSBuild-файл в виде <package_id>.targets или <package_id>.props (например Contoso.Utility.UsefulStuff.targets) в папки сборки проекта.
Создание папок
По мере развития NuGet различные папки для сборки .props и .targets добавлены.
| Folder | Версия NuGet | Использование |
|---|---|---|
| строить | 2.5+ | Построение логики для каждого фреймворка проекта. |
| buildMultiTargeting | 4.0+ | Логика разработки outer build для проектов, ориентированных на несколько фреймворков. Только PackageReference. |
| buildTransitive | 5.0+ | Построение логики для активов, которые передаются транзитивно в любой задействованный проект. См. об этой функции. Только PackageReference. |
Конкретная папка сборки платформы
Все 3 папки сборки соответствуют одному и тому же шаблону для выбора наиболее подходящего файла на основе целевой платформы проекта.
Файлы в корневой папке сборки build/<package_id>.targets и build/<package_id>.props считаются подходящими для всех целевых фреймворков.
Чтобы предоставить файлы, относящиеся к платформе, сначала следует разместить их в соответствующих вложенных папках, например в следующих случаях:
\build
\netstandard1.4
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
\net462
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
Предпочитайте использовать папки сборки для конкретной платформы при необходимости, чтобы избежать ложноположительных установок в проектах, которые могут не поддерживаться вашим пакетом.
Обратите внимание, что если пакет не содержит файлов в папках lib или ref, а имеет только файлы в конкретной папке сборки платформы, этот пакет будет считаться совместимым со всеми проектами. Актуальные версии инструментов пакета вызывают предупреждение NU5127 при создании таких пакетов.
Проекты, потребляющие пакеты с файлами сборки
Проекты PackageReference
.props и .targets не добавляются в файл проекта, но вместо этого становятся доступными через {projectName}.nuget.g.targets и {projectName}.nuget.g.props. Эти файлы создаются автоматически при выполнении восстановления.
Если проект предназначен для нескольких платформ, импорт в эти файлы зависит от имени целевой платформы.
MSBuild .props и .targets файлы для многоплатформенных целевых объектов можно поместить в папку \buildMultiTargeting .
При создании импорта устанавливается условие, что свойство MSBuild $(TargetFramework) пусто.
проекты packages.config
Когда NuGet устанавливает пакет с файлами \build, он добавляет в файл проекта элементы MSBuild <Import>, указывающие на файлы .targets и .props. (.props добавляется в верхней части файла проекта; .targets добавляется в нижней части.) Для каждой целевой платформы добавляется отдельный условный элемент MSBuild <Import> .
Разработка пакетов с помощью свойств и целей MSBuild
Вы можете использовать любой из следующих средств, чтобы включить MSBuild .props и .targets в пакет.
Руководство по содержанию свойств и целевых задач MSBuild
NuGet не ограничивает, как вы можете разрабатывать .props и .targets, так как это будет зависеть от необходимости автора пакета и самих целевых проектов.
В пакетах .props.targetsне должно быть сделано несколько действий, таких как отсутствие указания свойств и элементов, влияющих на восстановление, так как они будут автоматически исключены.
Некоторые примеры свойств, которые не должны быть добавлены или обновлены: TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback и т. д.
Некоторые примеры элементов, которые не должны быть добавлены или обновлены: PackageReference, PackageVersion, PackageDownload и т. д.