задачи MSBuild
Платформе построения требуется возможность выполнения любого числа действий во время процесса построения. Для выполнения этих действий MSBuild использует задачи. Задача — это блок исполняемого кода, с помощью которого MSBuild выполняет атомарные операции построения.
Алгоритмы задач
Формат XML-файла проекта MSBuild не позволяет выполнять все операции, поэтому алгоритм задачи должен быть реализован за пределами файла проекта.
Логика выполнения задачи реализована в виде класса платформы .NET, реализующего интерфейс ITask, который определен в пространстве имен Microsoft.Build.Framework.
Класс задач определяет также входные и выходные параметры, доступные задаче в файле проекта. Все открытые настраиваемые неабстрактные свойства, представляемые классом задач, получают значения в файле проекта путем помещения соответствующего атрибута с тем же именем в элемент Задача и устанавливают его значение, как показано в примерах далее в этой статье.
Для создания собственной задачи можно разработать управляемый класс, реализующий интерфейс ITask. Дополнительные сведения см. в статье Написание задач.
Выполнение задачи из файла проекта
Прежде чем выполнять задачу в файле проекта, необходимо сначала сопоставить тип в сборке, которая реализует задачу, с именем задачи с элементом UsingTask. Это позволяет MSBuild знать, где искать алгоритм выполнения задачи при обнаружении ее в файле проекта.
Чтобы выполнить задачу в файле проекта MSBuild, создайте элемент с именем таким же как у задачи в качестве дочернего элемента по отношению к элементу Target
. Если задача принимает параметры, они передаются как атрибуты элемента.
Списки элементов MSBuild и свойства можно использовать в качестве параметров. Например, следующий код вызывает задачу MakeDir
и задает значение свойства Directories
объекта MakeDir
равным значению свойства BuildDir
.
<Target Name="MakeBuildDirectory">
<MakeDir
Directories="$(BuildDir)" />
</Target>
Задачи могут возвращать данные в файл проекта, где они могут храниться в элементах и свойствах для последующего использования. Например, следующий код вызывает задачу Copy
и сохраняет данные из выходного свойства CopiedFiles
в списке элементов SuccessfullyCopiedFiles
.
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="@(MyDestFolder)">
<Output
TaskParameter="CopiedFiles"
ItemName="SuccessfullyCopiedFiles"/>
</Copy>
</Target>
Включенные задачи
MSBuild включает в себя много задач, например Copy — копирование файлов, MakeDir — создание каталогов и Csc — компиляция файлов исходного кода C#. Полный список доступных задач и сведения об их использовании см. в статье Справочные сведения о задачах MSBuild.
Переопределенные задачи
MSBuild ищет задачи в нескольких местах. Во первых, в файлах с расширением .OverrideTasks
, которые хранятся в каталоге MSBuild. Задачи в этих файлах переопределяют любые другие задачи с теми же именами, в том числе задачи в файле проекта. Второе расположение находится в файле проекта и его импорте. Если задача не определена в проекте, ее будут искать в задачах MSBuild по умолчанию, определенных в файле .tasks
в каталоге MSBuild.