Sdílet prostřednictvím


Cílové pořadí buildu

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 se neměli spoléhat na pořadí při deklaraci, 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í. Jakmile je cíl spuštěn, jeho úloha pro kompilaci je dokončena.

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. MSBuild nejprve spustí Chop cíl, poté Cook cíl, a nakonec spustí Serve cíl.

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 přepsat DependsOn vlastnosti pomocí dalších vlastních cílových objektů, které rozšiřují proces sestavení, jak je popsáno v části "Rozšíření procesu sestavení ve Visual Studiu".

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 a AfterTargets u stejného cíle. Jak je popsáno v další části, pouze první zjištěný cíl způsobí spuštění nového cíle.

Určit pořadí cílového buildu

Nástroj MSBuild určuje pořadí cílového sestavení následujícím způsobem:

  1. InitialTargets targety jsou spuštěny.

  2. Cíle zadané pomocí přepínače -target na příkazovém řádku se spustí. Pokud na příkazovém řádku nezadáte žádné cíle, spustí se DefaultTargets cíle. Pokud není přítomen ani jeden, spustí se první cíl, se kterým se setkáme.

  3. Vyhodnocuje Condition se atribut cíle. Pokud je atribut Condition přítomný a vyhodnotí se jako false, cíl se nespustí a nebude mít další vliv na sestavení.

    Jiné cíle, které uvádějí podmíněný cíl v BeforeTargets nebo AfterTargets, se stále provádějí v předepsaném pořadí bez ohledu na výsledek podmínky.

  4. Před tím, než je cíl vykonán nebo přeskočen, se jeho DependsOnTargets cíle spustí, pokud Condition není atribut použit na cíl, což by se vyhodnotilo jako false.

    Poznámka:

    Cíl se považuje za přeskočený, pokud se nespustí, protože jeho výstupní položky jsou up-to-date (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. Než je cíl spuštěn nebo přeskočen, je spuštěn jakýkoli jiný cíl, který má cíl uveden 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 vykonání nebo přeskočení cíle se spustí jakýkoli jiný cíl, který je uveden v atributu AfterTargets.