Pořadí sestavení cílů
Cíle musí být seřazeny, pokud vstup do jednoho cíle závisí na výstupu jiného cíle. Pomocí těchto atributů můžete určit pořadí spuštění cílů:
InitialTargets
. TentoProject
atribut určuje cíle, které se spustí jako první, i když jsou cíle zadané na příkazovém řádku nebo v atributuDefaultTargets
.DefaultTargets
. TentoProject
atribut určuje, které cíle se spustí, pokud není cíl explicitně zadán na příkazovém řádku.DependsOnTargets
. TentoTarget
atribut určuje cíle, které musí běžet před spuštěním tohoto cíle.BeforeTargets
aAfterTargets
. TytoTarget
atributy určují, že tento cíl by měl běžet před nebo za zadanými cíli.
Obecně platí, že byste neměli záviset na pořadí deklarace, abyste určili, které úkoly se spouštějí před jinými úkoly.
Cíl se během sestavení nikdy nespustí dvakrát, i když na něm závisí další cíl v sestavení. Po spuštění cíle se jeho příspěvek k sestavení dokončí.
Cíle můžou mít Condition
atribut. Pokud se zadaná podmínka vyhodnotí jako false
, cíl se nespustí a nemá na sestavení žádný vliv. Další informace o podmínkách naleznete v tématu Podmínky.
Počáteční cíle
Atribut InitialTargets
elementu Project určuje cíle, které se spustí jako první, i když jsou cíle zadány na příkazovém řádku nebo v atributu DefaultTargets
. Počáteční cíle se obvykle používají ke kontrole chyb.
Hodnota atributu InitialTargets
může být středníkem odděleným uspořádaným seznamem cílů. Následující příklad určuje, že Warm
se cíl spustí a pak Eject
cíl spustí.
<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Importované projekty můžou mít své vlastní InitialTargets
atributy. Všechny počáteční cíle se agregují společně a spouští se v pořadí.
Další informace naleznete v tématu Postupy: Určení cíle, který se má nejprve sestavit.
Výchozí cíle
Atribut DefaultTargets
elementu Project určuje, který cíl nebo cíle jsou vytvořeny, pokud cíl není explicitně zadán v příkazovém řádku.
Hodnota atributu DefaultTargets
může být středníkem odděleným seřazeným seznamem výchozích cílů. Následující příklad určuje, že Clean
se cíl spustí a pak Build
cíl spustí.
<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Výchozí cíle můžete přepsat pomocí přepínače -target na příkazovém řádku. Následující příklad určuje, že Build
se cíl spustí a pak Report
cíl spustí. Když tímto způsobem zadáte cíle, budou všechny výchozí cíle ignorovány.
msbuild -target:Build;Report
Pokud jsou zadány počáteční i výchozí cíle a pokud nejsou zadány žádné cíle příkazového řádku, nástroj MSBuild nejprve spustí počáteční cíle a pak spustí výchozí cíle.
Importované projekty můžou mít své vlastní DefaultTargets
atributy. První DefaultTargets
zjištěný atribut určuje, které výchozí cíle se budou spouštět.
Další informace naleznete v tématu Postupy: Určení cíle, který se má nejprve sestavit.
První cíl
Pokud neexistují žádné počáteční cíle, výchozí cíle nebo cíle příkazového řádku, nástroj MSBuild spustí první cíl, se kterým v souboru projektu nebo v importovaných souborech projektu narazí.
Cílové závislosti
Cíle můžou popisovat vztahy závislostí mezi sebou. Atribut DependsOnTargets
označuje, že cíl závisí na jiných cílech. Příklad:
<Target Name="Serve" DependsOnTargets="Chop;Cook" />
říká nástroji MSBuild, že Serve
cíl závisí na Chop
cíli a Cook
cíli. Nástroj MSBuild spustí Chop
cíl a pak Cook
spustí cíl před spuštěním Serve
cíle.
Poznámka:
Standardní cíle v sadě SDK definují řadu DependsOn
vlastností, které obsahují seznam cílů, které jsou závislostmi pro daný cíl (například $(BuildDependsOn)
, $(CleanDependsOn)
atd.). Příklad:
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
Pokud chcete projekt přizpůsobit, můžete vlastnosti přepsat DependsOn
dalšími vlastními cíli, které rozšiřují proces sestavení, jak je popsáno v části Rozšíření procesu sestavení sady Visual Studio.
BeforeTargets and AfterTargets
Cílové pořadí můžete zadat pomocí BeforeTargets
atributů a AfterTargets
atributů.
Zvažte následující 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>
Pokud chcete vytvořit zprostředkující cíl Optimize
, který se spustí za Compile
cílem, ale před Link
cílem, přidejte následující cíl kamkoli do elementu Project
.
<Target Name="Optimize" AfterTargets="Compile">
<Message Text="Optimizing" />
</Target>
Případně zadejte objednávku jako
<Target Name="Optimize" BeforeTargets="Link">
<Message Text="Optimizing" />
</Target>
Není užitečné zadat oba BeforeTargets
i AfterTargets
ve stejném cíli. Jak je popsáno v další části, způsobí spuštění nového cíle pouze první zjištěný cíl.
Určení pořadí cílového sestavení
Nástroj MSBuild určuje pořadí cílového sestavení následujícím způsobem:
InitialTargets
cíle jsou spuštěny.Cíle zadané na příkazovém řádku přepínače -target se spustí. Pokud na příkazovém řádku zadáte žádné cíle,
DefaultTargets
pak se cíle spustí. Pokud neexistuje ani jeden z nich, spustí se první zjištěný cíl.Vyhodnocuje
Condition
se atribut cíle. Pokud je atribut přítomný a vyhodnotífalse
seCondition
jako , cíl se nespustí a nebude mít na sestavení žádný další vliv.Jiné cíle, které uvádějí podmíněný cíl v
BeforeTargets
předepsaném pořadí neboAfterTargets
stále provádějí.Před spuštěním nebo přeskočením
DependsOnTargets
cíle se jeho cíle spustí, pokudCondition
se atribut nepoužije na cíl a vyhodnocujefalse
se .Poznámka:
Cíl se považuje za vynechaný, pokud se nespustí, protože jeho výstupní položky jsou aktuální (viz přírůstkové sestavení). Tato kontrola se provádí těsně před provedením úkolů uvnitř cíle a nemá vliv na pořadí provádění cílů.
Před spuštěním nebo přeskočením cíle se spustí jakýkoli jiný cíl, který vypíše cíl v atributu
BeforeTargets
.Před spuštěním cíle se porovná jeho
Inputs
atribut aOutputs
atribut. Pokud nástroj MSBuild zjistí, že všechny výstupní soubory jsou zastaralé vzhledem k odpovídajícímu vstupnímu souboru nebo souborům, nástroj MSBuild provede cíl. V opačném případě nástroj MSBuild přeskočí cíl.Po spuštění nebo vynechání cíle se spustí jakýkoli jiný cíl, který je vypíše v atributu
AfterTargets
.