MSBuild-Aufgaben
Eine Buildplattform muss in der Lage sein, während des Buildvorgangs eine beliebige Anzahl von Aktionen auszuführen.MSBuild verwendet Aufgaben, um diese Aktionen auszuführen.Eine Aufgabe ist eine Einheit von ausführbarem Code, der von MSBuild zum Ausführen unteilbarer Buildvorgänge verwendet wird.
Aufgabenlogik
Das XML-Projektdateiformat von MSBuild ist nicht in der Lage, Buildvorgänge eigenständig auszuführen, sodass außerhalb der Projektdatei eine Aufgabenlogik implementiert werden muss.
Die Ausführungslogik einer Aufgabe wird als .NET-Klasse implementiert, durch die die im Microsoft.Build.Framework-Namespace definierte ITask-Schnittstelle implementiert wird.
Durch die Aufgabenklasse werden auch die Eingabe- und Ausgabeparameter definiert, die in der Projektdatei für die Aufgabe verfügbar sind.Auf alle konfigurierbaren öffentlichen nicht statischen und nicht abstrakten Eigenschaften, die von der Aufgabenklasse verfügbar gemacht werden, kann über die Projektdatei zugegriffen werden, indem ein entsprechendes gleichnamiges Attribut in das Task-Element eingefügt wird.
Sie können eine eigene Aufgabe schreiben, indem Sie eine verwaltete Klasse erstellen, durch die die ITask-Schnittstelle implementiert wird.Weitere Informationen finden Sie unter Schreiben von Aufgaben.
Ausführen einer Aufgabe aus einer Projektdatei
Vor dem Ausführen einer Aufgabe in der Projektdatei müssen Sie dem Aufgabennamen mit dem UsingTask-Element zuerst den Typ in der Assembly zuweisen, durch die die Aufgabe implementiert wird.Wenn die Aufgabe in der Projektdatei gefunden wird, kann MSBuild anhand des Typs erkennen, wo sich die Ausführungslogik der Aufgabe befindet.
Um eine Aufgabe in einer MSBuild-Projektdatei auszuführen, erstellen Sie ein Element mit dem Namen der Aufgabe als unterordnetes Element eines Target-Elements.Wenn eine Aufgabe Parameter akzeptiert, werden diese als Attribute des Elements übergeben.
MSBuild-Elementlisten und -eigenschaften können als Parameter verwendet werden.Durch den folgenden Code wird beispielsweise die MakeDir-Aufgabe aufgerufen und der Wert der Directories-Eigenschaft des MakeDir-Objekts auf den Wert der im vorherigen Beispiel deklarierten BuildDir-Eigenschaft festgelegt.
<Target Name="MakeBuildDirectory">
<MakeDir
Directories="$(BuildDir)" />
</Target>
Aufgaben können auch Informationen an die Projektdatei zurückgeben, die zur späteren Verwendung in Elementen oder Eigenschaften gespeichert werden können.Durch den folgenden Code wird beispielsweise die Copy-Aufgabe aufgerufen, und die Informationen aus der CopiedFiles-Ausgabeeigenschaft werden in der SuccessfullyCopiedFiles-Elementliste gespeichert.
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="@(MyDestFolder)">
<Output
TaskParameter="CopiedFiles"
ItemName="SuccessfullyCopiedFiles"/>
</Copy>
</Target>
Bereits enthaltene Aufgaben
MSBuild wird mit zahlreichen Aufgaben, wie Copy zum Kopieren von Dateien, MakeDir zum Erstellen von Verzeichnissen und Csc zum Kompilieren von Visual C#-Quellcodedateien, bereitgestellt.Eine vollständige Liste der verfügbaren Aufgaben sowie Nutzungsinformationen finden Sie unter Referenz zu MSBuild-Aufgaben.
Überschriebene Aufgaben
MSBuild sucht Aufgaben an verschiedenen Orten.Der erste Ort sind in den .NET Framework-Verzeichnissen gespeicherte Dateien mit der Erweiterung .OverrideTasks.Aufgaben in diesen Dateien überschreiben alle anderen Aufgaben mit denselben Namen, einschließlich Aufgaben in der Projektdatei.Der zweite Ort sind in den .NET Framework-Verzeichnissen gespeicherte Dateien mit der Erweiterung .Tasks.Wenn die Aufgabe an keinem dieser Orte gefunden wird, wird die Aufgabe in der Projektdatei verwendet.