Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ziele müssen sortiert werden, wenn die Eingabe für ein Ziel von der Ausgabe eines anderen Ziels abhängt. Mit diesen Attributen können Sie die Reihenfolge angeben, in der Ziele ausgeführt werden:
InitialTargets
. DiesesProject
Attribut gibt die Ziele an, die zuerst ausgeführt werden, auch wenn Ziele in der Befehlszeile oder imDefaultTargets
Attribut angegeben sind.DefaultTargets
. DiesesProject
Attribut gibt an, welche Ziele ausgeführt werden, wenn ein Ziel nicht explizit in der Befehlszeile angegeben wird.DependsOnTargets
. DiesesTarget
Attribut gibt Ziele an, die ausgeführt werden müssen, bevor dieses Ziel ausgeführt werden kann.BeforeTargets
undAfterTargets
. DieseTarget
Attribute geben an, dass dieses Ziel vor oder nach den angegebenen Zielen ausgeführt werden soll.
Im Allgemeinen sollten Sie nicht von der Deklarationsreihenfolge abhängen, um anzugeben, welche Aufgaben vor anderen Aufgaben ausgeführt werden.
Ein Ziel wird während eines Builds nie zweimal ausgeführt, auch wenn ein nachfolgendes Ziel im Build davon abhängt. Sobald ein Ziel ausgeführt wurde, ist sein Beitrag zum Build abgeschlossen.
Ziele können über ein Condition
Attribut verfügen. Wenn die angegebene Bedingung den Wert false
hat, wird das Ziel nicht ausgeführt und hat keine Auswirkungen auf den Build. Weitere Informationen zu Bedingungen finden Sie unter Bedingungen.
Anfängliche Ziele
Das InitialTargets
Attribut des Project-Elements gibt Ziele an, die zuerst ausgeführt werden, auch wenn Ziele in der Befehlszeile oder im DefaultTargets
Attribut angegeben sind. Anfängliche Ziele werden in der Regel für die Fehlerüberprüfung verwendet.
Der Wert des InitialTargets
Attributs kann eine durch Semikolons getrennte, sortierte Liste von Zielen sein. Im folgenden Beispiel wird angegeben, dass das Warm
Ziel ausgeführt wird, und anschließend wird das Eject
Ziel ausgeführt.
<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Importierte Projekte können eigene InitialTargets
Attribute aufweisen. Alle anfänglichen Ziele werden aggregiert und in der Reihenfolge ausgeführt.
Weitere Informationen finden Sie unter So geben Sie an, welches Ziel zuerst erstellt werden soll.
Standardziele
Das DefaultTargets
Attribut des Project-Elements gibt an, welches Ziel oder welche Ziele erstellt werden, wenn ein Ziel nicht explizit in einer Befehlszeile angegeben wird.
Der Wert des DefaultTargets
Attributs kann eine durch Semikolons getrennte, sortierte Liste der Standardziele sein. Im folgenden Beispiel wird angegeben, dass das Clean
Ziel ausgeführt wird, und anschließend wird das Build
Ziel ausgeführt.
<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Sie können die Standardziele überschreiben, indem Sie den Schalter "-target " in der Befehlszeile verwenden. Im folgenden Beispiel wird angegeben, dass das Build
Ziel ausgeführt wird, und anschließend wird das Report
Ziel ausgeführt. Wenn Sie Ziele auf diese Weise angeben, werden alle Standardziele ignoriert.
msbuild -target:Build;Report
Wenn sowohl anfängliche Ziele als auch Standardziele angegeben sind und keine Befehlszeilenziele angegeben werden, führt MSBuild zuerst die ursprünglichen Ziele aus und führt dann die Standardziele aus.
Importierte Projekte können eigene DefaultTargets
Attribute aufweisen. Das erste DefaultTargets
gefundene Attribut bestimmt, welche Standardziele ausgeführt werden.
Weitere Informationen finden Sie unter So geben Sie an, welches Ziel zuerst erstellt werden soll.
Erstes Ziel
Wenn keine anfänglichen Ziele, Standardziele oder Befehlszeilenziele vorhanden sind, führt MSBuild das erste Ziel aus, das in der Projektdatei oder in importierten Projektdateien auftritt.
Zielabhängigkeiten
Ziele können Abhängigkeitsbeziehungen miteinander beschreiben. Das DependsOnTargets
Attribut gibt an, dass ein Ziel von anderen Zielen abhängt. Beispiel:
<Target Name="Serve" DependsOnTargets="Chop;Cook" />
weist MSBuild an, dass das Serve
Ziel vom Chop
Ziel und dem Cook
Ziel abhängt. MSBuild führt das Chop
Ziel aus und führt dann das Cook
Ziel aus, bevor es das Serve
Ziel ausführt.
Hinweis
Die Standardziele im SDK definieren eine Reihe von Eigenschaften, die die Liste der DependsOn
Ziele enthalten, welche Abhängigkeiten für dieses Ziel sind (z. B. $(BuildDependsOn)
, $(CleanDependsOn)
usw.). Beispiel:
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
Zum Anpassen eines Projekts können Sie die DependsOn
Eigenschaften mit zusätzlichen benutzerdefinierten Zielen überschreiben, die den Buildprozess erweitern, wie im Erweitern des Visual Studio-Buildprozesses beschrieben.
BeforeTargets und AfterTargets
Sie können die Zielreihenfolge mithilfe der Attribute BeforeTargets
und AfterTargets
angeben.
Betrachten Sie das folgende Skript.
<Project DefaultTargets="Compile;Link" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Compile">
<Message Text="Compiling" />
</Target>
<Target Name="Link">
<Message Text="Linking" />
</Target>
</Project>
Um ein Zwischenziel Optimize
zu erstellen, das nach dem Compile
Ziel ausgeführt wird, aber vor dem Link
Ziel, fügen Sie das folgende Ziel an einer beliebigen Stelle im Project
Element hinzu.
<Target Name="Optimize" AfterTargets="Compile">
<Message Text="Optimizing" />
</Target>
Alternativ geben Sie die Reihenfolge an als
<Target Name="Optimize" BeforeTargets="Link">
<Message Text="Optimizing" />
</Target>
Es ist nicht sinnvoll, beideBeforeTargets
und AfterTargets
für dasselbe Ziel anzugeben. Wie im nächsten Abschnitt beschrieben, führt nur das erste gefundene Ziel dazu, dass das neue Ziel ausgeführt wird.
Bestimmen der Zielbauprozessreihenfolge
MSBuild bestimmt die Zielbuildreihenfolge wie folgt:
InitialTargets
Ziele werden ausgeführt.Ziele, die in der Befehlszeile durch die Option "-target " angegeben sind, werden ausgeführt. Wenn Sie keine Ziele in der Befehlszeile angeben, werden die
DefaultTargets
Ziele ausgeführt. Wenn keines vorhanden ist, wird das erste gefundene Ziel ausgeführt.Das
Condition
Attribut des Ziels wird ausgewertet. Wenn dasCondition
Attribut vorhanden ist und zufalse
ausgewertet wird, wird das Ziel nicht ausgeführt und hat keine weiteren Auswirkungen auf den Build.Andere Ziele, die das bedingte Ziel in
BeforeTargets
oderAfterTargets
auflisten, werden dennoch in der vorgeschriebenen Reihenfolge ausgeführt, unabhängig vom Ergebnis der Bedingung.Bevor das Ziel ausgeführt oder übersprungen wird, werden seine
DependsOnTargets
Ziele ausgeführt, es sei denn, dasCondition
Attribut wird auf das Ziel angewendet und zufalse
ausgewertet.Hinweis
Ein Ziel wird als übersprungen betrachtet, wenn es nicht ausgeführt wird, da die Ausgabeelemente up-to-datum sind (siehe inkrementelles Build). Diese Überprüfung erfolgt direkt vor dem Ausführen der Aufgaben innerhalb des Ziels und wirkt sich nicht auf die Reihenfolge der Ausführung von Zielen aus.
Bevor das Ziel ausgeführt oder übersprungen wird, wird jedes andere Ziel, das das Ziel in einem
BeforeTargets
Attribut auflistet, ausgeführt.Bevor das Ziel ausgeführt wird, werden das
Inputs
-Attribut und dasOutputs
-Attribut verglichen. Wenn MSBuild feststellt, dass alle Ausgabedateien in Bezug auf die entsprechende Eingabedatei oder -dateien veraltet sind, führt MSBuild das Ziel aus. Andernfalls überspringt MSBuild das Ziel.Nachdem das Ziel ausgeführt oder übersprungen wurde, wird jedes andere Ziel, das es in einem
AfterTargets
Attribut auflistet, ausgeführt.