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. Tento Project atribut určuje cíle, které se spustí jako první, i když jsou cíle zadané na příkazovém řádku nebo v atributu DefaultTargets .

  • DefaultTargets. Tento Project atribut určuje, které cíle se spustí, pokud není cíl explicitně zadán na příkazovém řádku.

  • DependsOnTargets. Tento Target atribut určuje cíle, které musí běžet před spuštěním tohoto cíle.

  • BeforeTargets a AfterTargets. Tyto Target 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:

  1. InitialTargets cíle jsou spuštěny.

  2. 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.

  3. Vyhodnocuje Condition se atribut cíle. Pokud je atribut přítomný a vyhodnotí falsese Condition 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í nebo AfterTargets stále provádějí.

  4. Před spuštěním nebo přeskočením DependsOnTargets cíle se jeho cíle spustí, pokud Condition se atribut nepoužije na cíl a vyhodnocuje falsese .

    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ů.

  5. 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 .

  6. Před spuštěním cíle se porovná jeho Inputs atribut a Outputs 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.

  7. Po spuštění nebo vynechání cíle se spustí jakýkoli jiný cíl, který je vypíše v atributu AfterTargets .