Настройка сборки
Проекты MSBuild, использующие стандартный процесс сборки (импорт Microsoft.Common.props и Microsoft.Common.targets), имеют несколько обработчиков расширяемости, позволяющих настроить процесс сборки.
Многие настраиваемые операции сборки управляются свойствами. Важно знать, как и где задать значение свойства, чтобы иметь нужный эффект. Вы можете задать свойства в командной строке (и в файлах ответа), в специальных файлах, таких как Directory.Build.props, в импортированных файлах или в файле проекта. Важно знать, где используется свойство, задать или изменить порядок импортированных файлов, включая неявные импорты из пакетов SDK, таких как пакет SDK для .NET.
Список свойств см. в разделе "Общие свойства MSBuild".
Изучение параметров настройки
Следующие параметры настройки перечислены в порядке повышения сложности и область влияния. Рекомендуется использовать наименее сложный вариант настройки, который служит вашей целью, начиная с верхней части этого списка.
Параметр настройки | Description |
---|---|
Добавление аргументов в командную строку MSBuild | Задайте глобальные свойства, влияющие на основную сборку и сборку всех зависимых проектов. |
Настройка сборки для одного проекта | Добавьте свойства в .props или .targets файлы для настройки параметров сборки. |
Обработка созданных файлов в процессе сборки | Как убедиться, что созданные файлы правильно включены в выходные данные сборки. |
Настройка сборки для одного или нескольких проектов | Добавьте свойства в Directory.Build.props или добавьте свойства и целевые объекты в Directory.Build.targets , чтобы настроить сборку для всех проектов в папке. Этот метод полезен для задания свойств, которые задаются или используются пакетом SDK, а также настройки области, чтобы они влияли на все проекты в папке или вложенной папке. |
Настройка локальной сборки | Внесите изменения в сборку только на локальном компьютере, не затрагивая общие исходные файлы. |
Настройка всех сборок .NET | Настройте сборку с помощью системных область для сборок .NET. |
Настройка сборок C++ | Настройте сборку C++ область в проект, решение, папку или все сборки, управляемые установкой MSBuild в системе. |
Добавление аргументов в вызовы командной строки MSBuild для проекта
Глобальные свойства можно задать в командной строке. Глобальные свойства влияют на все сборки проекта, включая зависимости. Помните, что создание проекта автоматически активирует возможную сборку для всех зависимостей проекта. Обычное поведение MSBuild заключается в создании любых зависимых проектов, которые устарели. Эти зависимые сборки проекта запускаются с теми же глобальными параметрами свойств из командной строки, что и исходный проект.
Файл Directory.Build.rsp в исходном каталоге применяется к сборкам командной строки проекта. Дополнительные сведения см. в разделе Файлы ответов MSBuild.
Выбор между добавлением свойств в .props
файл или .targets
файл
Поведение MSBuild зависит от порядка импорта, то есть всегда используется последнее обработанное определение свойства (или UsingTask
, или целевого объекта).
При использовании явных импортов можно импортировать из файла или .targets
файла в любой .props
момент. Ниже приведено широко используемое соглашение:
.props
Файлы импортируются рано в порядке импорта..targets
файлы импортируются поздно в порядке сборки.
Такое соглашение поддерживается инструкциями import <Project Sdk="SdkName">
(например, файл Sdk.props импортируется первым, до всего содержимого файла, а файл Sdk.targets — последним, после всего содержимого файла).
При выборе места для размещения свойств используйте следующие рекомендации общего характера.
Для многих свойств это не имеет значения, где они определены, так как они не перезаписываются и считываются только во время выполнения.
Для поведения, которое может быть настроено в отдельном проекте, задайте значения по умолчанию в
.props
файлах.Избегайте настройки зависимых свойств в
.props
файлах, считывая значение возможно настраиваемого свойства, так как настройка не происходит, пока MSBuild не считывает проект пользователя.Задайте зависимые свойства в
.targets
файлах, так как они собирают настройки из отдельных проектов.Если вам нужно переопределить свойства, сделайте это в файле, после того как все настройки проекта пользователя имели возможность вступить в
.targets
силу. Будьте внимательны при использовании производных свойств, поскольку их также нужно переопределять.Включение элементов в
.props
файлы (условие для свойства). Все свойства учитываются перед любым элементом, поэтому настройки свойств пользовательского проекта будут выбраны, а импортированные элементы в.props
файлах предоставляют проекту пользователя возможностьRemove
илиUpdate
любой элемент, внесенный импортом.Определение целевых объектов в
.targets
файлах. Однако если файл импортируется пакетом SDK, помните,.targets
что этот сценарий затрудняет переопределение целевого объекта, так как проект пользователя по умолчанию не имеет места для переопределения.По возможности старайтесь настраивать свойства во время вычисления, а не изменять их внутри целевого объекта. Эта рекомендация упрощает загрузку проекта и понимание его механизма работы.