tarefas MSBuild

Uma plataforma de build precisa de capacidade para executar qualquer número de ações durante o processo de build. O MSBuild usa tarefas para executar essas ações. Uma tarefa é uma unidade de código executável usada pelo MSBuild para executar operações atômicas de build.

Lógica da tarefa

O formato de arquivo de projeto XML do MSBuild não consegue executar totalmente operações de build por conta própria, então, a lógica de tarefa deve ser implementada fora do arquivo de projeto.

A lógica de execução de uma tarefa é implementada como uma classe do .NET que implementa a interface ITask, que é definida no namespace Microsoft.Build.Framework.

A classe de tarefa também define os parâmetros de entrada e saída disponíveis para a tarefa no arquivo de projeto. Todas as propriedades não abstratas não estáticas e configuráveis públicas expostas pela classe de tarefa podem receber valores no arquivo de projeto colocando um atributo correspondente com o mesmo nome no elemento Tarefa e definindo seu valor, conforme mostrado nos exemplos mais adiante neste artigo.

Você pode escrever sua própria tarefa por meio da criação de uma classe gerenciada que implementa a interface ITask. Para saber mais, confira Produção de tarefas.

Executar uma tarefa de um arquivo de projeto

Antes de executar uma tarefa no seu arquivo de projeto, primeiro você deve mapear o tipo no assembly que implementa a tarefa para o nome da tarefa com o elemento UsingTask. Isso permite que o MSBuild saiba onde procurar a lógica de execução da sua tarefa ao encontrá-la em seu arquivo de projeto.

Para executar uma tarefa em um arquivo de projeto do MSBuild, crie um elemento com o nome da tarefa como um filho de um elemento Target. Se uma tarefa aceita parâmetros, eles são passados como atributos do elemento.

As listas de itens e propriedades do MSBuild podem ser usadas como parâmetros. Por exemplo, o código a seguir chama a tarefa MakeDir e define o valor da propriedade Directories do objeto MakeDir igual ao valor da propriedade BuildDir:

<Target Name="MakeBuildDirectory">
    <MakeDir
        Directories="$(BuildDir)" />
</Target>

As tarefas também podem retornar informações para o arquivo de projeto, que pode ser armazenado em itens ou propriedades para uso posterior. Por exemplo, o código a seguir chama a tarefa Copy e armazena as informações da propriedade de saída CopiedFiles na lista de itens SuccessfullyCopiedFiles.

<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="@(MyDestFolder)">
        <Output
            TaskParameter="CopiedFiles"
            ItemName="SuccessfullyCopiedFiles"/>
     </Copy>
</Target>

Tarefas incluídas

O MSBuild é fornecido com várias tarefas, como Copy, que copia arquivos, MakeDir, que cria diretórios, e Csc, que compila arquivos de código-fonte do C#. Para obter uma lista completa das tarefas disponíveis e informações de uso, confira Referência de tarefas.

Tarefas substituídas

O MSBuild procura tarefas em vários locais. O primeiro local é em arquivos com a extensão .OverrideTasks armazenados nos diretórios do MSBuild. As tarefas nesses arquivos substituem quaisquer outras tarefas com os mesmos nomes, incluindo tarefas no arquivo de projeto. O segundo local é no arquivo de projeto e suas importações. Se a tarefa não estiver definida no projeto, ela será pesquisada nas tarefas padrão do MSBuild que são definidas em um arquivo .tasks no diretório do MSBuild.