задачи 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.