Файлы .props и .targets MSBuild в пакете
Помимо классических сборок, пакеты NuGet могут иногда добавлять целевые объекты или свойства пользовательских сборок в проекты, использующие этот пакет.
Для этого необходимо добавить допустимый файл MSBuild в виде <package_id>.targets
или <package_id>.props
(например, Contoso.Utility.UsefulStuff.targets
) в папки сборки проекта.
Папки сборки
По мере развития NuGet добавлялись различные папки для файлов сборки .props
и .targets
.
Папка | Версия NuGet | Использование |
---|---|---|
сборка | 2.5 и выше | Логика сборки для каждой платформы проекта. |
buildMultiTargeting | 4.0+ | Логика сборки для outer build для проектов, предназначенных для нескольких платформ. Только PackageReference. |
buildTransitive | 5.0 и выше | Логика сборки для ресурсов, которые транзитивно передаются в любой принимающий проект. См. об этой функции. Только PackageReference. |
Папка сборки для конкретной платформы
Все три папки сборки выполняют одинаковые действия при определении наиболее подходящего файла в зависимости от целевой платформы проекта.
Файлы в корневой папке сборки (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>
.
Разработка пакетов с файлами .props и .targets MSBuild
Чтобы включить в пакет файлы .props
и .targets
MSBuild, можно использовать любое из следующих средств.
Руководство по содержимому файлов .props и .targets MSBuild
NuGet не ограничивает разработку файлов .props
и .targets
, так как они могут различаться в зависимости от потребностей разработчика пакета и целевых проектов.
Однако в файлах пакетов .props
и .targets
не следует выполнять некоторые действия, например нельзя указывать свойства и элементы, которые влияют на восстановление, так как они будут автоматически исключены.
Далее приведены некоторые примеры свойств, которые нельзя добавлять или обновлять: TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback и т. д.
Далее приведены некоторые примеры элементов, которые нельзя добавлять или обновлять: PackageReference, PackageVersion, PackageDownload и т. д.