Sdílet prostřednictvím


Úkol psaní

Ú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 Úloha MSBuild odkaz.

Ú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í Prvek UsingTask (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

t9883dzc.collapse_all(cs-cz,VS.110).gifDescription

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

t9883dzc.collapse_all(cs-cz,VS.110).gifKó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

t9883dzc.collapse_all(cs-cz,VS.110).gifDescription

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

t9883dzc.collapse_all(cs-cz,VS.110).gifKó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

t9883dzc.collapse_all(cs-cz,VS.110).gifDescription

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.

t9883dzc.collapse_all(cs-cz,VS.110).gifKó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

t9883dzc.collapse_all(cs-cz,VS.110).gifDescription

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

t9883dzc.collapse_all(cs-cz,VS.110).gifKó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

Úloha MSBuild odkaz

Úloha MSBuild odkaz