Настройка сборки

Проекты 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 что этот сценарий затрудняет переопределение целевого объекта, так как проект пользователя по умолчанию не имеет места для переопределения.

  • По возможности старайтесь настраивать свойства во время вычисления, а не изменять их внутри целевого объекта. Эта рекомендация упрощает загрузку проекта и понимание его механизма работы.