Zapisywanie zadania
Zadania zawierają kod, który jest uruchamiany w trakcie kompilacji.Zadania są zawarte w cele.Biblioteka do typowych zadań jest dołączony do MSBuild, można także tworzyć własnych zadań.Aby uzyskać więcej informacji na temat biblioteki zadań, które są dołączone do MSBuild, zobacz Zadanie programu MSBuild odniesienia.
Zadania
Przykładami zadania kopię, która kopiuje jeden lub więcej plików, MakeDir, który tworzy katalog, i Csc, które skompiluje Visual C# plikami kodu źródłowego.Każde zadanie jest zaimplementowany jako.Klasa netto, który implementuje ITask interfejs, który jest zdefiniowany w zestawie Microsoft.Build.Framework.dll.
Istnieją dwa podejścia, używanych podczas wykonywania zadania:
Wdrożenie ITask interfejsu bezpośrednio.
Klasa dziedziczyć po klasie, Task, który jest zdefiniowany w zestawie Microsoft.Build.Utilities.dll.Zadanie implementuje ITask i zapewnia domyślne implementacje niektórzy członkowie ITask.Dodatkowo rejestrowanie jest łatwiejsze.
W obu przypadkach należy dodać do swojej klasy metodę o nazwie Execute, który jest metoda, która jest wywoływana, gdy zadanie jest uruchamiane.Ta metoda nie ma parametrów i zwraca Boolean wartość: true Jeśli udało się zadanie lub false , jeśli go nie powiodło się.Poniższy przykład przedstawia zadania, który nie wykonuje żadnej akcji i zwraca true.
using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace MyTasks
{
public class SimpleTask : Task
{
public override bool Execute()
{
return true;
}
}
}
Następujący plik projektu uruchamia zadanie to:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask />
</Target>
</Project>
Uruchomienie zadania, mogą otrzymać dane wejściowe z pliku projektu również po utworzeniu.NET właściwości klasy zadania.MSBuildUstawia te właściwości bezpośrednio przed wywołaniem zadania Execute metody.Aby utworzyć właściwość ciągu, użyć kodu zadań takich jak:
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; }
}
}
}
To zadanie i zestawów następujących projektu uruchamia plik MyProperty do danej wartości:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask MyProperty="Value for MyProperty" />
</Target>
</Project>
Rejestrowanie zadań
Jeśli projekt ma uruchomić zadanie, MSBuild musi wiedzieć, jak Zlokalizuj zestaw, który zawiera klasy zadania.Zadania są rejestrowane przy użyciu Element UsingTask (MSBuild).
MSBuild Plik Microsoft.Common.Tasks jest plik projektu, który zawiera listę UsingTask elementów, które rejestrują wszystkie zadania, które są dostarczane z MSBuild.Ten plik jest automatycznie uwzględniane podczas tworzenia każdego projektu.Jeśli zadanie, który jest zarejestrowany w Microsoft.Common.Tasks jest również rejestrowana w bieżącym pliku projektu, bieżący plik projektu ma pierwszeństwo przed; oznacza to, że można zastąpić domyślne zadanie z własnych zadań, który ma taką samą nazwę.
Porada |
---|
Można wyświetlić listę zadań, które są dostarczane z MSBuild , przeglądając zawartość Microsoft.Common.Tasks. |
Podnoszenie zdarzenia z zadania
Jeśli zadanie pochodzi od Task klasy pomocy możesz można użyć dowolnego z następujących metod pomocniczych na Task klasy do wywołania zdarzeń, które zostaną złowione i wyświetlane przez każdy zarejestrowany rejestratory:
public override bool Execute()
{
Log.LogError("messageResource1", "1", "2", "3");
Log.LogWarning("messageResource2");
Log.LogMessage(MessageImportance.High, "messageResource3");
...
}
Jeśli zadanie implementuje ITask bezpośrednio, nadal można podnieść takie zdarzenia, ale należy użyć interfejsu IBuildEngine.Poniższy przykład przedstawia zadania, który implementuje ITask i podnosi zdarzenia niestandardowego:
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;
}
}
Można ustawić parametry zadania wymagające
Niektóre właściwości zadania jako "wymagane" można oznaczyć tak, że dowolny plik projektu, który uruchamia zadanie, należy ustawić wartości tych właściwości lub budowanie nie powiedzie się.Stosuje się [Required] atrybutu do.NET właściwości zadania w następujący sposób:
private string requiredProperty;
[Required]
public string RequiredProperty
{
get { return requiredProperty; }
set { requiredProperty = value; }
}
[Required] Atrybut jest zdefiniowany przez RequiredAttribute w Microsoft.Build.Framework obszaru nazw.
Przykład
Opis
To następujące Visual C# klasy demonstruje zadania wynikające z Task klasy pomocy.To zadanie zwraca true, wskazując, że udało się go.
Kod
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;
}
}
}
Przykład
Opis
To następujące Visual C# klasy demonstruje, zadania wykonawcze ITask interfejsu.To zadanie zwraca true, wskazując, że udało się go.
Kod
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;
}
}
}
Przykład
Opis
To Visual C# klasy demonstruje zadania, który wynika z Task klasy pomocy.Właściwość wymagany ciąg znaków i wywołuje zdarzenie wyświetlane przez wszystkich zarejestrowanych rejestratory.
Kod
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;
}
}
}
Przykład
Opis
W poniższym przykładzie przedstawiono plik projektu, wywoływanie poprzednie zadanie przykład SimpleTask3.
Kod
<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>