Sdílet prostřednictvím


Zápis úloh

Úkoly obsahují kód, který spouští během procesu vytváření.Úkoly jsou obsaženy v cíli.Je součástí knihovny typické úkoly MSBuild, a můžete také vytvořit své vlastní úkoly.Další informace o knihovně úkoly, které jsou součástí MSBuild, viz Referenční dokumentace úlohy nástroje MSBuild.

Úkoly

Příklady úkolů kopie, která zkopíruje jeden nebo více souborů, MakeDir, který vytvoří adresář, a Csc, které kompiluje Visual C# zdrojové soubory kód.Každý úkol je implementován jako.NET třídy, která implementuje ITask rozhraní, které je definováno v sestavení Microsoft.Build.Framework.dll.

Existují dva přístupy, které můžete použít při provádění úlohy:

  • Implementace ITask rozhraní přímo.

  • Třída odvozena od třídy pomocníka Task, která je definována v sestavení Microsoft.Build.Utilities.dll.Úloha implementuje ITask a poskytuje výchozí implementace některé členy ITask.Protokolování je navíc snazší.

V obou případech je nutné přidat do třídy metodu pojmenovanou Execute, což je metoda, která je volána při spuštění úlohy.Tato metoda žádné parametry a vrací Boolean hodnota: true Pokud úkol úspěšně nebo false Pokud se nezdařilo.Následující příklad zobrazuje úkol, který neprovede žádnou akci a vrátí true.

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

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

Tato úloha spuštěna následující soubor projektu:

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

Při spuštění úlohy, můžete také obdrží vstupy ze souboru projektu při vytvoření.NET vlastnosti třídy úloh.MSBuildNastaví vlastnosti bezprostředně před voláním úkolu Execute metoda.Chcete-li vytvořit vlastnost řetězce použijte například kód úlohy:

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; }
        }
    }
}

Tento úkol a nastaví následující projektu spustí soubor MyProperty na danou hodnotu:

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

Registrace úlohy

Pokud projekt spuštění úlohy, MSBuild musí vědět, jak najít sestavení, která obsahuje třídy úloh.Úkoly jsou registrovány pomocí UsingTask – element (MSBuild).

MSBuild Microsoft.Common.Tasks je soubor projektu, který obsahuje seznam UsingTask prvky, které zaregistrovat všechny úkoly, které jsou dodány s MSBuild.Tento soubor se automaticky při vytváření každého projektu.Pokud je úkol, který je registrován v Microsoft.Common.Tasks také registrován v aktuálním souboru projektu, aktuální soubor projektu přednost; je možné přepsat výchozí úkol s vlastní úkol, který má stejný název.

Tip

Můžete zobrazit seznam úkolů, které jsou dodány s MSBuild zobrazením obsahu Microsoft.Common.Tasks.

Zvýšení události z úkolu

Pokud váš úkol je odvozen z Task pomocné třídy, můžete použít některý z následujících metod pomocníka na Task třídy událostí, které budou zobrazeny všechny registrované úhozy kláves a ulovených zvýšit:

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

Pokud úloha implementuje ITask přímo, můžete stále zvýšení těchto událostí, ale je nutné použít rozhraní IBuildEngine.Následující příklad zobrazuje úkol, který implementuje ITask a vyvolává vlastní události:

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;
    }
}

Nastavit parametry úlohy vyžadující

Některé vlastnosti úlohy potřeby"" lze označit tak, aby jakýkoli soubor projektu, bude úloha musí nastavit hodnoty těchto vlastností nebo sestavení selže.Použije [Required] atributu na.NET vlastnost v úkolu takto:

private string requiredProperty;

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

[Required] Je definován atribut RequiredAttribute v Microsoft.Build.Framework oboru názvů.

Příklad

Description

Následující Visual C# třídy ukazuje úkolů vyplývajících z Task pomocná třída.Tento úkol vrátí true, označující, že ji proběhlo úspěšně.

Kód

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;
        }
    }
}

Příklad

Description

Následující Visual C# ukazuje třídy úloh provádění ITask rozhraní.Tento úkol vrátí true, označující, že ji proběhlo úspěšně.

Kód

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;
        }
    }
}

Příklad

Description

Tento Visual C# ukazuje, úkol, který je odvozen od třídy Task pomocná třída.Vlastnost povinný řetězec a aktivuje událost, zobrazí se všechny registrované úhozy kláves.

Kód

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;
        }
    }
}

Příklad

Description

Následující příklad ukazuje soubor projektu vyvolání předchozí příklad úkol SimpleTask3.

Kód

<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>

Viz také

Další zdroje

Referenční dokumentace úlohy nástroje MSBuild

Referenční dokumentace úlohy nástroje MSBuild