MSBuild ターゲットMSBuild Targets

ターゲットはタスクを特定の順序でグループ化し、ビルド プロセスを小さな単位に分割することを可能にします。Targets group tasks together in a particular order and allow the build process to be factored into smaller units. たとえば、あるターゲットは、ビルドの準備として、出力ディレクトリに含まれるすべてのファイルを削除し、別のターゲットは、プロジェクトに対する入力をコンパイルし、空のディレクトリに配置します。For example, one target may delete all files in the output directory to prepare for the build, while another compiles the inputs for the project and places them in the empty directory. タスクについて詳しくは、「MSBuild タスク」をご覧ください。For more information on tasks, see Tasks.

プロジェクト ファイルでターゲットを宣言するDeclaring Targets in the Project File

ターゲットは、プロジェクト ファイル内で、Target 要素を使用して宣言します。Targets are declared in a project file with the Target element. たとえば、次の XML は Construct という名前のターゲットを作成し、Compile というアイテムの種類で Csc タスクを呼び出します。For example, the following XML creates a target named Construct, which then calls the Csc task with the Compile item type.

<Target Name="Construct">  
    <Csc Sources="@(Compile)" />  
</Target>  

MSBuild プロパティと同様に、ターゲットは再定義できます。Like MSBuild properties, targets can be redefined. 次に例を示します。For example,

<Target Name="AfterBuild" >  
    <Message Text="First occurrence" />  
</Target>  
<Target Name="AfterBuild" >  
    <Message Text="Second occurrence" />  
</Target>  

AfterBuild を実行すると、"Second occurrence" (2 番目の出現) のみが表示されます。If AfterBuild executes, it displays only "Second occurrence".

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

あるターゲットへの入力が別のターゲットの出力に依存する場合、ターゲットの順序を指定する必要があります。Targets must be ordered if the input to one target depends on the output of another target. ターゲットの実行順序はいくつかの方法で指定できます。There are several ways to specify the order in which targets run.

  • 初期ターゲットInitial targets

  • 既定のターゲットDefault targets

  • 最初のターゲットFirst target

  • ターゲットの依存関係Target dependencies

  • BeforeTargetsAfterTargets (MSBuild 4.0)BeforeTargets and AfterTargets (MSBuild 4.0)

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

    ターゲットのビルド順序に関する詳細については、「ターゲットのビルド順序」を参照してください。For details and more information about the target build order, see Target Build Order.

ターゲットのバッチTarget Batching

あるターゲット要素に、%(メタデータ) 形式でメタデータを指定する Outputs 属性が含まれている場合があります。A target element may have an Outputs attribute which specifies metadata in the form %(Metadata). その場合、MSBuild は一意のメタデータ値ごとにターゲットを 1 回実行し、そのメタデータ値を含むアイテムをグループ化または "バッチ処理" します。If so, MSBuild runs the target once for each unique metadata value, grouping or "batching" the items that have that metadata value. 次に例を示します。For example,

<ItemGroup>  
    <Reference Include="System.Core">  
      <RequiredTargetFramework>3.5</RequiredTargetFramework>  
    </Reference>  
    <Reference Include="System.Xml.Linq">  
      <RequiredTargetFramework>3.5</RequiredTargetFramework>  
    </Reference>  
    <Reference Include="Microsoft.CSharp">  
      <RequiredTargetFramework>4.0</RequiredTargetFramework>  
    </Reference>  
</ItemGroup>  
<Target Name="AfterBuild"  
    Outputs="%(Reference.RequiredTargetFramework)">  
    <Message Text="Reference:  
      @(Reference->'%(RequiredTargetFramework)')" />  
</Target>  

RequiredTargetFramework メタデータによって参照項目をバッチ処理します。batches the Reference items by their RequiredTargetFramework metadata. このターゲットの出力は次のようになります。The output of the target looks like this:

Reference: 3.5;3.5  
Reference: 4.0  

ターゲット バッチ処理が実際のビルドで利用されることはほとんどありません。Target batching is seldom used in real builds. タスクのバッチが一般的です。Task batching is more common. 詳細については、「MSBuild バッチ」をご覧ください。For more information, see Batching.

インクリメンタル ビルドIncremental Builds

インクリメンタル ビルドは、対応する入力ファイルに対して最新の状態の出力ファイルを含むターゲットが実行されないように最適化されたビルドです。Incremental builds are builds that are optimized so that targets with output files that are up-to-date with respect to their corresponding input files are not executed. ターゲット要素には、Inputs 属性と Outputs 属性の両方を含めることができます。ターゲットが入力として受け取る項目と出力として生成する項目をそれぞれ示します。A target element can have both Inputs and Outputs attributes, indicating what items the target expects as input, and what items it produces as output.

すべての出力項目が最新の状態になっている場合、MSBuild はターゲットをスキップします。これがビルドのスピードを大幅に上げます。If all output items are up-to-date, MSBuild skips the target, which significantly improves the build speed. これはターゲットのインクリメンタル ビルドと呼ばれています。This is called an incremental build of the target. 一部のファイルだけが最新の状態になっている場合、MSBuild は最新の項目なしでターゲットを実行します。If only some files are up-to-date, MSBuild executes the target without the up-to-date items. これはターゲットの部分的インクリメンタル ビルドと呼ばれています。This is called a partial incremental build of the target. 詳しくは、「インクリメンタル ビルド」を参照してください。For more information, see Incremental Builds.

関連項目See Also

MSBuild の概念 MSBuild Concepts
方法: 複数のプロジェクト ファイルで同じターゲットを使用するHow to: Use the Same Target in Multiple Project Files