Compartilhar via


Como: Gravar uma tarefa

Tarefas fornecem o código que executa durante o processo de compilação.As tarefas estão contidas nos destinos.Uma biblioteca de tarefas típicas está incluída no MSBuild, e você também pode criar suas próprias tarefas. Para obter mais informações sobre a biblioteca de tarefas que estão incluídos no MSBuild, consulte Referência de tarefas do MSBuild.

Tarefas

Exemplos de tarefas Cópia, que copia um ou mais arquivos, MakeDir, que cria um diretório e CSC, que compila Visual C# arquivos de código-fonte. Cada tarefa é implementada sistema autônomo uma classe .NET que implementa o ITask interface, que é definido no assembly Microsoft.compilação.estrutura.dll.

Há duas abordagens que você pode usar durante a implementação de uma tarefa:

  • Implementar o ITask interface diretamente.

  • Derivar a classe de classe auxiliar, Task, que é definido no assembly Microsoft.compilação.Utilities.dll. Tarefa implementa ITask e fornece implementações padrão de alguns membros ITask.Além disso, o registrar registrar registrar em log é mais fácil.

Em ambos os casos, você deve adicionar à sua classe de um método chamado Execute, que é o método é chamado quando a tarefa é executada. Esse método não usa nenhum parâmetro e retorna um Boolean valor: true Se a tarefa foi bem-sucedida ou false Se falhar. O exemplo a seguir mostra uma tarefa que não executa nenhuma ação e retorna true.

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace MyTasks
{
    public class SimpleTask : Task
    {
        public override bool Execute()
        {
            return true;
        }
    }
}

O arquivo de projeto a seguir executa essa tarefa:

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="MyTarget">
        <SimpleTask />
    </Target>
</Project>

Quando executa tarefas, eles também podem receber entradas do arquivo de projeto se você criar propriedades do .NET na classe tarefa.MSBuild define essas propriedades imediatamente antes de chamar a tarefa Execute método. Para criar uma propriedade de cadeia de caracteres, use o código da tarefa, sistema autônomo:

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace MyTasks
{
    public class SimpleTask : Task
    {
        public override bool Execute()
        {
            return true;
         }

        private string myProperty;
        public string MyProperty
        {
            get { return myProperty; }
            set { myProperty = value; }
        }
    }
}

O arquivo de projeto a seguir executa essa tarefa e define MyProperty o valor determinado:

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
   <Target Name="MyTarget">
      <SimpleTask MyProperty="Value for MyProperty" />
   </Target>
</Project>

Registrando tarefas

Se for um projeto para executar uma tarefa, MSBuild deve saber como localizar o assembly que contém a classe da tarefa. Tarefas são registradas usando o Elemento UsingTask (MSBuild).

The MSBuild arquivo Microsoft.Common.Tasks é um arquivo de projeto que contém uma lista de UsingTask elementos que registram todas as tarefas que são fornecidas com MSBuild. Este arquivo é automaticamente incluído durante a criação de cada projeto.Se uma tarefa que está registrada no Microsoft.Common.Tasks também é registrada no arquivo de projeto corrente, o arquivo de projeto corrente tem prioridade; isto é, você pode substituir uma tarefa padrão com sua própria tarefa que tem o mesmo nome.

Dica:

Você pode ver uma lista das tarefas que são fornecidos com MSBuild exibindo o Sumário de Microsoft.Common.Tasks.

Gerar eventos a partir de uma tarefa

Se sua tarefa deriva o Task classe auxiliar, você pode usar qualquer um dos seguintes métodos auxiliares no Task classe para eventos que serão capturados e exibidos por qualquer registradores registrados:

public override bool Execute()
{
    Log.LogError("messageResource1", "1", "2", "3");
    Log.LogWarning("messageResource2");
    Log.LogMessage(BuildEventImportance.High, "messageResource3");
    ...
}

Se sua tarefa implementa ITask diretamente, você ainda pode aumentar esses eventos, mas você deve usar a interface do IBuildEngine. O exemplo a seguir mostra uma tarefa que implementa ITask e dispara um evento personalizado:

public class SimpleTask : ITask
{
    private IBuildEngine buildEngine;
    public IBuildEngine BuildEngine
    {
        get{ return buildEngine; }
        set{ buildEngine = value; }
    }

    public override bool Execute()
    {
        TaskEventArgs taskEvent =
            new TaskEventArgs(BuildEventCategory.Custom,
            BuildEventImportance.High, "Important Message",
           "SimpleTask");
        BuildEngine.LogBuildEvent(taskEvent);
        return true;
    }
}

Exigir que parâmetros de tarefa para ser conjunto

Você pode marcar determinadas propriedades de tarefa sistema autônomo “ necessário ” para que qualquer arquivo de projeto que executa a tarefa deve conjunto valores para essas propriedades ou a compilação falhará.Aplicar o [Required] atributo da propriedade .NET na sua tarefa da seguinte maneira:

private string requiredProperty;

[Required]
public string RequiredProperty
{
    get { return requiredProperty; }
    set { requiredProperty = value; }
}

The [Required] atributo é definido por RequiredAttribute no Microsoft.Build.Framework espaço para nome.

Exemplo

Descrição

Este seguinte Visual C# classe demonstra uma tarefa de derivação da Task classe auxiliar. Esta tarefa retorna true, indicando que ela teve êxito.

Código

using System;
using Microsoft.Build.Utilities;

namespace SimpleTask1
{
    public class SimpleTask1: Task
    {
        public override bool Execute()
        {
            // This is where the task would presumably do its work.
            return true;
        }
    }
}

Exemplo

Descrição

Este seguinte Visual C# classe demonstra uma tarefa a implementação do ITask interface. Esta tarefa retorna true, indicando que ela teve êxito.

Código

using System;
using Microsoft.Build.Framework;

namespace SimpleTask2
{
    public class SimpleTask2: ITask
    {
        //When implementing the ITask interface, it is necessary to
        //implement a BuildEngine property of type
        //Microsoft.Build.Framework.IBuildEngine. This is done for
        //you if you derive from the Task class.
        private IBuildEngine buildEngine;
        public IBuildEngine BuildEngine
        {
            get
            {
                return buildEngine;
            }
            set
            {
                buildEngine = value;
            }
         }

        // When implementing the ITask interface, it is necessary to
        // implement a HostObject property of type Object.
        // This is done for you if you derive from the Task class.
        private Object hostObject;
        public Object HostObject
        {
            get
            {
                return hostObject;
            }

            set
            {
                hostObject = value;
            }
        }

        public bool Execute()
        {
            // This is where the task would presumably do its work.
            return true;
        }
    }
}

Exemplo

Descrição

Este Visual C# classe demonstra uma tarefa que deriva de Task classe auxiliar. Ele tem uma propriedade de cadeia de caracteres necessário e gera um evento é exibido por todos os registradores registrados.

Código

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace SimpleTask3
{
    public class SimpleTask3 : Task
    {
        private string myProperty;

        // The [Required] attribute indicates a required property.
        // If a project file invokes this task without passing a value
        // to this property, the build will fail immediately.
        [Required]
        public string MyProperty
        {
            get
            {
                return myProperty;
            }
            set
            {
                myProperty = value;
            }
        }

        public override bool Execute()
        {
            // Log a high-importance comment
            Log.LogMessage(MessageImportance.High,
                "The task was passed \"" + myProperty + "\".");
            return true;
        }
    }
}

Exemplo

Descrição

O exemplo a seguir mostra um arquivo de projeto invocando a tarefa do exemplo anterior, SimpleTask3.

Código

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="SimpleTask3.SimpleTask3" 
        AssemblyFile="SimpleTask3\bin\debug\simpletask3.dll"/>

    <Target Name="MyTarget">
        <SimpleTask3 MyProperty="Hello!"/>
    </Target>
</Project>

Consulte também

Outros recursos

Referência de tarefas do MSBuild

Referência de tarefas do MSBuild