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.

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.

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