ターゲットのビルド順序Target Build Order

あるターゲットへの入力が別のターゲットの出力に依存する場合、ターゲットの順序を指定する必要があります。Targets must be ordered if the input to one target depends on the output of another target. 以下の属性を使用して、ターゲットを実行する順序を指定できます。You can use these attributes to specify the order in which targets are run:

  • InitialTargetsInitialTargets. この Project 属性は、ターゲットがコマンド ラインまたは DefaultTargets 属性に指定されている場合でも最初に実行されるターゲットを指定します。This Project attribute specifies the targets that will run first, even if targets are specified on the command line or in the DefaultTargets attribute.

  • DefaultTargetsDefaultTargets. この Project 属性は、ターゲットがコマンドラインで明示的に指定されていない場合に実行するターゲットを指定します。This Project atttribute specifies which targets are run if a target is not specified explicitly on the command line.

  • DependsOnTargetsDependsOnTargets. この Target 属性は、このターゲットを実行する前に実行する必要があるターゲットを指定します。This Target attribute specifies targets that must run before this target can run.

  • BeforeTargets および AfterTargetsBeforeTargets and AfterTargets. これらの Target 属性は、このターゲットを、指定されたターゲットの前または後に実行するように指定します (MSBuild 4.0)。These Target attributes specify that this target should run before or after the specified targets (MSBuild 4.0).

    ビルド内の後続のターゲットがそのターゲットに依存している場合でも、ビルド中に 1 つのターゲットが 2 回実行されることはありません。A target is never run twice during a build, even if a subsequent target in the build depends on it. ターゲットは一度実行されると、それ以上ビルドに影響しません。Once a target has been run, its contribution to the build is complete.

    ターゲットには Condition 属性を指定することができます。Targets may have a Condition attribute. 指定した条件が false と評価された場合、ターゲットは実行されず、ビルドには影響しません。If the specified condition evaluates to false, the target isn't executed and has no effect on the build. 条件の詳細については、「条件」を参照してください。For more information about conditions, see Conditions.

初期ターゲットInitial Targets

Project 要素の InitialTargets 属性は、ターゲットがコマンド ラインまたは DefaultTargets 属性に指定されている場合でも最初に実行されるターゲットを指定します。The InitialTargets attribute of the Project element specifies targets that will run first, even if targets are specified on the command line or in the DefaultTargets attribute. 通常、初期ターゲットはエラー チェックに使用されます。Initial targets are typically used for error checking.

InitialTargets 属性の値は、ターゲットをセミコロンで区切った、順序指定された一覧です。The value of the InitialTargets attribute can be a semicolon-delimited, ordered list of targets. 次の例では、Warm ターゲットを実行してから Eject ターゲットを実行するように指定しています。The following example specifies that the Warm target runs, and then the Eject target runs.

<Project InitialTargets="Warm;Eject" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

インポートされたプロジェクトには、独自の InitialTargets 属性が含まれている場合があります。Imported projects may have their own InitialTargets attributes. それらのすべての初期ターゲットが集約されて順番に実行されます。All initial targets are aggregated together and run in order.

詳細については、「方法: 最初にビルドするターゲットを指定する」を参照してください。For more information, see How to: Specify Which Target to Build First.

既定のターゲットDefault Targets

Project 要素の DefaultTargets 属性は、ターゲットがコマンド ラインで明示的に指定されていない場合にビルドするターゲット (複数可) を指定します。The DefaultTargets attribute of the Project element specifies which target or targets are built if a target isn't specified explicitly in a command line.

DefaultTargets 属性の値は、既定のターゲットをセミコロンで区切った、順序指定された一覧です。The value of the DefaultTargets attribute can be a semicolon-delimited, ordered list of default targets. 次の例では、Clean ターゲットを実行してから Build ターゲットを実行するように指定しています。The following example specifies that the Clean target runs, and then the Build target runs.

<Project DefaultTargets="Clean;Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

コマンド ラインで /target スイッチを使用して、既定のターゲットをオーバーライドすることができます。You can override the default targets by using the /target switch on the command line. 次の例では、Build ターゲットを実行してから Report ターゲットを実行するように指定しています。The following example specifies that the Build target runs, and then the Report target runs. この方法でターゲットを指定する場合、既定のターゲットは無視されます。When you specify targets in this way, any default targets are ignored.

msbuild /target:Build;Report

初期ターゲットと既定のターゲットの両方が指定されており、コマンド ライン ターゲットが指定されていない場合、MSBuild はまず初期ターゲットを実行してから、既定のターゲットを実行します。If both initial targets and default targets are specified, and if no command-line targets are specified, MSBuild runs the initial targets first, and then runs the default targets.

インポートされたプロジェクトには、独自の DefaultTargets 属性が含まれている場合があります。Imported projects may have their own DefaultTargets attributes. 検出された最初の DefaultTargets 属性によって、実行する既定のターゲットが決定されます。The first DefaultTargets attribute encountered determines which default targets will run.

詳細については、「方法: 最初にビルドするターゲットを指定する」を参照してください。For more information, see How to: Specify Which Target to Build First.

最初のターゲットFirst Target

初期ターゲット、既定のターゲット、またはコマンド ラインのターゲットがいずれも指定されていない場合、MSBuild はプロジェクト ファイル内またはインポートされたプロジェクト ファイル内で検出された最初のターゲットを実行します。If there are no initial targets, default targets, or command-line targets, then MSBuild runs the first target it encounters in the project file or any imported project files.

ターゲットの依存関係Target Dependencies

ターゲット同士は相互に依存関係を記述できます。Targets can describe dependency relationships with each other. DependsOnTargets 属性は、ターゲットが他のターゲットに依存していることを示します。The DependsOnTargets attribute indicates that a target depends on other targets. 次に例を示します。For example,

<Target Name="Serve" DependsOnTargets="Chop;Cook" />  

Serve ターゲットが Chop ターゲットと Cook ターゲットに依存することを MSBuild に指示します。tells MSBuild that the Serve target depends on the Chop target and the Cook target. MSBuild は Chop ターゲット、Cook ターゲットの順に実行してから、Serve ターゲットを実行します。MSBuild runs the Chop target, and then runs the Cook target before it runs the Serve target.

BeforeTargets と AfterTargetsBeforeTargets and After Targets

MSBuild 4.0 では、BeforeTargets 属性と AfterTargets 属性を使用して、ターゲットの順序を指定できます。In MSBuild 4.0, you can specify target order by using the BeforeTargets and AfterTargets attributes.

次のスクリプトがあるとします。Consider the following script.

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

Compile ターゲットの後、Link ターゲットの前に実行される中間ターゲット Optimize を作成するには、Project 要素内の任意の場所に次のターゲットを追加します。To create an intermediate target Optimize that runs after the Compile target, but before the Link target, add the following target anywhere in the Project element.

<Target Name="Optimize"   
    AfterTargets="Compile" BeforeTargets="Link">  
    <Message Text="Optimizing" />  
</Target>  

ターゲットのビルド順序の決定Determining the Target Build Order

MSBuild では、ターゲットのビルド順序を次のように決定します。MSBuild determines the target build order as follows:

  1. InitialTargets ターゲットが実行されます。InitialTargets targets are run.

  2. /target スイッチによってコマンドラインで指定されたターゲットが実行されます。Targets specified on the command line by the /target switch are run. コマンド ラインでターゲットが指定されていない場合、DefaultTargets ターゲットが実行されます。If you specify no targets on the command line, then the DefaultTargets targets are run. どちらも存在しない場合は、検出された最初のターゲットが実行されます。If neither is present, then the first target encountered is run.

  3. ターゲットの Condition 属性が評価されます。The Condition attribute of the target is evaluated. Condition 属性が存在し、false と評価された場合、ターゲットは実行されず、ビルドにはそれ以上影響しません。If the Condition attribute is present and evaluates to false, the target isn't executed and has no further effect on the build.

  4. あるターゲットが実行される前には、その DependsOnTargets ターゲットが実行されます。Before a target is executed, its DependsOnTargets targets are run.

  5. あるターゲットが実行される前には、そのターゲットを BeforeTargets 属性に一覧表示しているターゲットが実行されます。Before a target is executed, any target that lists it in a BeforeTargets attribute is run.

  6. あるターゲットが実行される前には、その Inputs 属性と Outputs 属性が比較されます。Before a target is executed, its Inputs attribute and Outputs attribute are compared. 対応する入力ファイルに対して最新ではない出力ファイルがあると MSBuild が判断した場合、MSBuild はターゲットを実行します。If MSBuild determines that any output files are out of date with respect to the corresponding input file or files, then MSBuild executes the target. それ以外の場合は、MSBuild はターゲットをスキップします。Otherwise, MSBuild skips the target.

  7. あるターゲットが実行またはスキップされると、その後、そのターゲットを AfterTargets 属性に一覧表示しているターゲットが実行されます。After a target is executed or skipped, any target that lists it in an AfterTargets attribute is run.

関連項目See Also

ターゲットTargets