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>