MSBuild バッチMSBuild Batching

MSBuildMSBuild には、項目メタデータに基づき、項目一覧をさまざまなカテゴリまたはバッチに分割し、各バッチで一度に 1 つのターゲットまたはタスクを実行する機能があります。 has the ability to divide item lists into different categories, or batches, based on item metadata, and run a target or task one time with each batch.

タスクのバッチ処理Task Batching

タスクのバッチ処理を利用すると、項目一覧をさまざまバッチに分割し、各バッチをタスクに個別に渡すことができます。プロジェクト ファイルが扱いやすくなります。Task batching allows you to simplify your project files by providing a way to divide item lists into different batches and pass each of those batches into a task separately. つまり、プロジェクト ファイルは複数回実行できますが、タスクとその属性は一回宣言すれば十分です。This means that a project file only needs to have the task and its attributes declared once, even though it can be run several times.

タスク属性の 1 つで %(ItemMetaDataName) という表記を利用し、MSBuildMSBuild でタスクのバッチ処理を実行するように指定します。You specify that you want MSBuildMSBuild to perform batching with a task by using the %(ItemMetaDataName) notation in one of the task attributes. 次の例では、Example 項目一覧が Color 項目メタデータ値に基づいてバッチに分割し、各バッチを MyTask タスクに個別に渡します。The following example splits the Example item list into batches based on the Color item metadata value, and passes each of the batches to the MyTask task separately.

注意

タスク属性の他の場所で項目一覧を参照しない場合、あるいはメタデータ名があいまいな場合、%(ItemCollection.ItemMetaDataName) という表記を利用し、バッチ処理に使用する項目メタデータ値を完全修飾できます。If you do not reference the item list elsewhere in the task attributes, or the metadata name may be ambiguous, you can use the %(ItemCollection.ItemMetaDataName) notation to fully qualify the item metadata value to use for batching.

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

    <ItemGroup>  
        <Example Include="Item1">  
            <Color>Blue</Color>  
        </Example>  
        <Example Include="Item2">  
            <Color>Red</Color>  
        </Example>  
    </ItemGroup>  

    <Target Name="RunMyTask">  
        <MyTask  
            Sources = "@(Example)"  
            Output = "%(Color)\MyFile.txt"/>  
    </Target>  

</Project>  

特定のバッチ処理の例については、「タスクのバッチの項目メタデータ」を参照してください。For more specific batching examples, see Item Metadata in Task Batching.

ターゲットのバッチ処理Target Batching

MSBuildMSBuild は、ターゲットを実行する前に、ターゲットの入力と出力が最新の状態になっているか確認します。 checks if the inputs and outputs of a target are up-to-date before it runs the target. 入力と出力の両方が最新の状態になっている場合、ターゲットはスキップされます。If both inputs and outputs are up-to-date, the target is skipped. ターゲット内のタスクがバッチ処理を利用する場合、MSBuildMSBuild では、項目の各バッチの入力と出力が最新の状態になっているか判断する必要があります。If a task inside of a target uses batching, MSBuildMSBuild needs to determine if the inputs and outputs for each batch of items is up-to-date. 最新の状態ではない場合、ターゲットにヒットするたびにターゲットが実行されます。Otherwise, the target is executed every time it is hit.

次の例では、%(ItemMetaDataName) 表記がある Outputs 属性を含む Target 要素を確認できます。The following example shows a Target element that contains an Outputs attribute with the %(ItemMetaDataName) notation. MSBuildMSBuildColor メタデータに基づいて Example 項目一覧をバッチに分割し、バッチごとに出力ファイルのタイムスタンプを分析します。 will divide the Example item list into batches based on the Color item metadata, and analyze the timestamps of the output files for each batch. バッチからの出力が最新の状態ではない場合、ターゲットが実行されます。If the outputs from a batch are not up-to-date, the target is run. 最新の状態であれば、ターゲットはスキップされます。Otherwise, the target is skipped.

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

    <ItemGroup>  
        <Example Include="Item1">  
            <Color>Blue</Color>  
        </Example>  
        <Example Include="Item2">  
            <Color>Red</Color>  
        </Example>  
    </ItemGroup>  

    <Target Name="RunMyTask"  
        Inputs="@(Example)"  
        Outputs="%(Color)\MyFile.txt">  
        <MyTask  
            Sources = "@(Example)"  
            Output = "%(Color)\MyFile.txt"/>  
    </Target>  

</Project>  

ターゲットのバッチ処理のもう 1 つの例については、「ターゲットのバッチの項目メタデータ」を参照してください。For another example of target batching, see Item Metadata in Target Batching.

メタデータを利用するプロパティ関数Property Functions Using Metadata

バッチ処理は、メタデータを含むプロパティ関数で制御できます。Batching can be controlled by property functions that include metadata. たとえば、オブジェクトに適用されたFor example,

$([System.IO.Path]::Combine($(RootPath),%(Compile.Identity)))

このプロパティ関数は、<xref:System.IO.Path.Combine%2A> を使用し、ルート フォルダーパスとコンパイル項目パスを結合します。uses <xref:System.IO.Path.Combine%2A> to combine a root folder path with a Compile item path.

プロパティ関数はメタデータ値内に表示されない場合があります。Property functions may not appear within metadata values. たとえば、オブジェクトに適用されたFor example,

%(Compile.FullPath.Substring(0,3))

これは許可されません。is not allowed.

プロパティ関数の詳細については、「プロパティ関数」を参照してください。For more information about property functions, see Property Functions.

参照See Also

ItemMetadata 要素 (MSBuild) ItemMetadata Element (MSBuild)
MSBuild の概念 MSBuild Concepts
MSBuild リファレンス MSBuild Reference
詳細な概念Advanced Concepts