MSBuild-Aufgaben

Eine Buildplattform muss während des Buildprozesses eine beliebige Anzahl von Aktionen auszuführen können. MSBuild verwendet Aufgaben zum Ausführen dieser Aktionen. Eine Aufgabe ist eine Einheit von ausführbarem Code, der von MSBuild verwendet wird, um unteilbare Buildvorgänge auszuführen.

Aufgabenlogik

Das XML-Projektdateiformat von MSBuild kann Buildvorgänge selbst nicht vollständig ausführen. Daher muss die Aufgabenlogik außerhalb der Projektdatei implementiert werden.

Die Ausführungslogik einer Aufgabe wird als .NET-Klasse implementiert, die die ITask-Schnittstelle implementiert, die im Microsoft.Build.Framework-Namespace definiert ist.

Die Aufgabenklasse definiert darüber hinaus die für eine Aufgabe in der Projektdatei verfügbaren Eingabe- und Ausgabeparameter. Auf alle konfigurierbaren öffentlichen nicht statischen und nicht abstrakten Eigenschaften, die von der Aufgabenklasse verfügbar gemacht werden, kann in der Projektdatei zugegriffen werden, indem ein entsprechendes Attribut mit demselben Namen im Task-Element platziert wird.

Sie können eine eigene Aufgabe schreiben, indem Sie eine verwaltete Klasse erstellen, die die ITask-Schnittstelle implementiert. 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 zuerst den Typ in der Assembly zuordnen, der die Aufgabe mithilfe des Elements UsingTask in den Aufgabennamen implementiert. Auf diese Weise weiß MSBuild, wo es nach der Ausführungslogik der Aufgabe suchen muss, wenn diese in der Projektdatei gefunden wird.

Erstellen Sie ein Element mit dem Namen der Aufgabe als untergeordnetes Element eines Target-Elements, um eine Aufgabe in einer MSBuild-Projektdatei auszuführen. Wenn eine Aufgabe Parameter akzeptiert, werden diese als Attribute des Elements übergeben.

MSBuild-Elementlisten und -Eigenschaften können als Parameter verwendet werden. Der folgende Code ruft z. B. die Aufgabe MakeDir auf und legt für die Directories-Eigenschaft des MakeDir-Objekts denselben Wert wie für die BuildDir-Eigenschaft fest:

<Target Name="MakeBuildDirectory">
    <MakeDir
        Directories="$(BuildDir)" />
</Target>

Aufgaben können zudem Informationen an die Projektdatei zurückgeben, die für die spätere Verwendung in Elementen oder Eigenschaften gespeichert werden können. Der folgende Code ruft z.B. die Copy-Aufgabe auf und speichert die Informationen aus der CopiedFiles-Ausgabeeigenschaft in der SuccessfullyCopiedFiles-Elementliste.

<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="@(MyDestFolder)">
        <Output
            TaskParameter="CopiedFiles"
            ItemName="SuccessfullyCopiedFiles"/>
     </Copy>
</Target>

Verfügbare Aufgaben

MSBuild stellt zahlreiche Aufgaben bereit, z. B. Copy zum Kopieren von Dateien, MakeDir zum Erstellen von Verzeichnissen und Csc zum Kompilieren von C#-Quellcodedateien. Eine vollständige Liste der verfügbaren Aufgaben sowie Nutzungsinformationen finden Sie unter Aufgabenreferenz.

Überschriebene Aufgaben

MSBuild sucht an verschiedenen Speicherorten nach Aufgaben. Beim ersten Speicherort handelt es sich um Dateien mit der Erweiterung .OverrideTasks, die im MSBuild-Verzeichnis gespeichert sind. Aufgaben in diesen Dateien überschreiben alle anderen Aufgaben mit denselben Namen, einschließlich Aufgaben in der Projektdatei. Der zweite Speicherort befindet sich in der Projektdatei und seinen Importen. Wenn der Vorgang im Projekt nicht definiert ist, wird er in den Standardaufgaben von MSBuild gesucht, die in einer .tasks Datei im MSBuild-Verzeichnis definiert sind.