タスクのバッチの項目メタデータItem Metadata in Task Batching

MSBuildMSBuild には、項目メタデータに基づき、項目リストをさまざまなカテゴリまたはバッチに分割し、各バッチで一度に 1 つのタスクを実行する機能があります。 has the ability to divide item lists into different categories, or batches, based on item metadata, and run a task one time with each batch. 厳密にどの項目がどのバッチで渡されるのかは少々複雑です。It can be confusing to understand exactly what items are being passed with which batch. このトピックでは、バッチ処理を伴う一般的なシナリオについて説明します。This topic covers the following common scenarios that involve batching.

  • 1 つの項目リストをバッチに分割するDividing an item list into batches

  • 複数の項目リストをバッチに分割するDividing several item lists into batches

  • 一度に 1 つの項目をバッチ処理するBatching one item at a time

  • 項目リストをフィルター処理するFiltering item lists

    MSBuildMSBuild によるバッチ処理については、「バッチ処理」を参照してください。For more information on batching with MSBuildMSBuild, see Batching.

1 つの項目リストをバッチに分割するDividing an Item list into Batches

バッチ処理では、項目メタデータに基づいて 1 つの項目リストを複数のバッチに分割し、各バッチを 1 つのタスクに個別に渡すことができます。Batching allows you to divide an item list into different batches based on item metadata, and pass each of the batches into a task separately. サテライト アセンブリのビルドに便利です。This is useful for building satellite assemblies.

次の例は、項目メタデータに基づいて 1 つの項目リストをバッチに分割する方法を示しています。The following example shows how to divide an item list into batches based on item metadata. ExampColl 項目リストが Number 項目メタデータに基づいて 3 つのバッチに分割されます。The ExampColl item list is divided into three batches based on the Number item metadata. Text 属性に %(ExampColl.Number) があることで、バッチ処理の実行が MSBuildMSBuild に通知されます。The presence of %(ExampColl.Number)in the Text attribute notifies MSBuildMSBuild that batching should be performed. ExampColl 項目リストは Number メタデータに基づいて 3 つのバッチに分割され、各バッチが個別にタスクに渡されます。The ExampColl item list is divided into three batches based on the Number metadata, and each batch is passed separately into the task.

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

    <ItemGroup>  
        <ExampColl Include="Item1">  
            <Number>1</Number>  
        </ExampColl>  
        <ExampColl Include="Item2">  
            <Number>2</Number>  
        </ExampColl>  
        <ExampColl Include="Item3">  
            <Number>3</Number>  
        </ExampColl>  
        <ExampColl Include="Item4">  
            <Number>1</Number>  
        </ExampColl>  
        <ExampColl Include="Item5">  
            <Number>2</Number>  
        </ExampColl>  
        <ExampColl Include="Item6">  
            <Number>3</Number>  
        </ExampColl>  
    </ItemGroup>  

    <Target Name="ShowMessage">  
        <Message  
            Text = "Number: %(ExampColl.Number) -- Items in ExampColl: @(ExampColl)"/>  
    </Target>  

</Project>  

Message タスク タスクには、次の情報が表示されます。The Message Task task displays the following information:

Number: 1 -- Items in ExampColl: Item1;Item4

Number: 2 -- Items in ExampColl: Item2;Item5

Number: 3 -- Items in ExampColl: Item3;Item6

複数の項目リストをバッチに分割するDividing Several Item lists into Batches

MSBuildMSBuild は、同じメタデータに基づいて複数の項目をバッチに分割できます。 can divide multiple item lists into batches based on the same metadata. 異なる項目リストをバッチに分割し、複数のアセンブリをビルドする作業が簡単になります。This makes it easy to divide different item lists into batches to build multiple assemblies. たとえば、.cs ファイルの項目リストをアプリケーション バッチとアセンブリ バッチに分割し、リソース ファイルの項目リストをアプリケーション バッチとアセンブリ バッチに分割します。For example, you could have an item list of .cs files divided into an application batch and an assembly batch, and an item list of resource files divided into an application batch and an assembly batch. それからバッチ処理を利用し、これらの項目リストを 1 つのタスクに私、アプリケーションとアセンブリの両方をビルドできます。You could then use batching to pass these item lists into one task and build both the application and the assembly.

注意

タスクに渡される項目リストにメタデータを参照する項目が含まれていない場合、その項目リストのすべての項目がすべてのバッチに渡されます。If an item list being passed into a task contains no items with the referenced metadata, every item in that item list is passed into every batch.

次の例は、項目メタデータに基づいて複数の項目リストをバッチに分割する方法を示しています。The following example shows how to divide multiple item list into batches based on item metadata. ExampCollExampColl2 の項目リストが Number 項目メタデータに基づいてそれぞれ 3 つのバッチに分割されます。The ExampColl and ExampColl2 item lists are each divided into three batches based on the Number item metadata. Text 属性に %(Number) があることで、バッチ処理の実行が MSBuildMSBuild に通知されます。The presence of %(Number)in the Text attribute notifies MSBuildMSBuild that batching should be performed. ExampCollExampColl2 の項目リストは Number メタデータに基づいて 3 つのバッチに分割され、各バッチが個別にタスクに渡されます。The ExampColl and ExampColl2 item lists are divided into three batches based on the Number metadata, and each batch is passed separately into the task.

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

    <ItemGroup>  

        <ExampColl Include="Item1">  
            <Number>1</Number>  
        </ExampColl>  
        <ExampColl Include="Item2">  
            <Number>2</Number>  
        </ExampColl>  
        <ExampColl Include="Item3">  
            <Number>3</Number>  
        </ExampColl>  

        <ExampColl2 Include="Item4">  
            <Number>1</Number>  
        </ExampColl2>  
        <ExampColl2 Include="Item5">  
            <Number>2</Number>  
        </ExampColl2>  
        <ExampColl2 Include="Item6">  
            <Number>3</Number>  
        </ExampColl2>  

    </ItemGroup>  

    <Target Name="ShowMessage">  
        <Message  
            Text = "Number: %(Number) -- Items in ExampColl: @(ExampColl) ExampColl2: @(ExampColl2)"/>  
    </Target>  

</Project>  

Message タスク タスクには、次の情報が表示されます。The Message Task task displays the following information:

Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4

Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5

Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6

一度に 1 つの項目をバッチ処理するBatching One Item at a Time

バッチ処理は、作成時にすべての項目に割り当てられる既知の項目メタデータでも実行できます。Batching can also be performed on well-known item metadata that is assigned to every item upon creation. それにより、コレクション内のすべての項目にバッチ処理に使用するメタデータが与えられます。This guarantees that every item in a collection will have some metadata to use for batching. Identity メタデータ値はすべての項目に固有のものであり、1 つの項目リスト内のすべての項目を 1 つの個別バッチに分割するときに役立ちます。The Identity metadata value is unique for every item, and is useful for dividing every item in an item list into a separate batch. 既知の項目メタデータの一覧については、「既知の項目メタデータ」をご覧ください。For a complete list of well-known item metadata, see Well-known Item Metadata.

次の例では、項目リストの各項目を 1 つずつバッチ処理する方法を示しています。The following example shows how to batch each item in an item list one at a time. すべての項目の Identity メタデータ値が固有であるため、ExampColl 項目リストは 6 つのバッチに分割されます。各バッチに項目リストの 1 つの項目が含まれています。Because the Identity metadata value of every item is unique, the ExampColl item list is divided into six batches, each batch containing one item of the item list. Text 属性に %(Identity) があることで、バッチ処理の実行が MSBuildMSBuild に通知されます。The presence of %(Identity)in the Text attribute notifies MSBuildMSBuild that batching should be performed.

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

    <ItemGroup>  

        <ExampColl Include="Item1"/>  
        <ExampColl Include="Item2"/>  
        <ExampColl Include="Item3"/>  
        <ExampColl Include="Item4"/>  
        <ExampColl Include="Item5"/>  
        <ExampColl Include="Item6"/>  

    </ItemGroup>  

    <Target Name="ShowMessage">  
        <Message  
            Text = "Identity: "%(Identity)" -- Items in ExampColl: @(ExampColl)"/>  
    </Target>  

</Project>  

Message タスク タスクには、次の情報が表示されます。The Message Task task displays the following information:

Identity: "Item1" -- Items in ExampColl: Item1  
Identity: "Item2" -- Items in ExampColl: Item2  
Identity: "Item3" -- Items in ExampColl: Item3  
Identity: "Item4" -- Items in ExampColl: Item4  
Identity: "Item5" -- Items in ExampColl: Item5  
Identity: "Item6" -- Items in ExampColl: Item6  

項目リストをフィルター処理するFiltering Item lists

バッチ処理を利用すれば、1 つの項目リストをタスクに渡す前に特定の項目をフィルター処理できます。Batching can be used to filter out certain items from an item list before passing it to a task. たとえば、既知の項目メタデータ Extension でフィルター処理すると、特定の拡張子を持つファイルのみでタスクが実行されます。For example, filtering on the Extension well-known item metadata value allows you to run a task on only files with a specific extension.

次の例は、項目メタデータに基づいて項目リストをバッチに分割し、タスクに渡すときにバッチをフィルター処理する方法を示しています。The following example shows how to divide an item list into batches based on item metadata, and then filter those batches when they are passed into a task. ExampColl 項目リストが Number 項目メタデータに基づいて 3 つのバッチに分割されます。The ExampColl item list is divided into three batches based on the Number item metadata. タスクの Condition 属性は、Number 項目メタデータ値が 2 のバッチのみをタスクに渡すことを指定します。The Condition attribute of the task specifies that only batches with a Number item metadata value of 2 will be passed into the task

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

    <ItemGroup>  

        <ExampColl Include="Item1">  
            <Number>1</Number>  
        </ExampColl>  
        <ExampColl Include="Item2">  
            <Number>2</Number>  
        </ExampColl>  
        <ExampColl Include="Item3">  
            <Number>3</Number>  
        </ExampColl>  
        <ExampColl Include="Item4">  
            <Number>1</Number>  
        </ExampColl>  
        <ExampColl Include="Item5">  
            <Number>2</Number>  
        </ExampColl>  
        <ExampColl Include="Item6">  
            <Number>3</Number>  
        </ExampColl>  

    </ItemGroup>  

    <Target Name="Exec">  
        <Message  
            Text = "Items in ExampColl: @(ExampColl)"  
            Condition="'%(Number)'=='2'"/>  
    </Target>  

</Project>  

Message タスク タスクには、次の情報が表示されます。The Message Task task displays the following information:

Items in ExampColl: Item2;Item5  

関連項目See Also

既知の項目メタデータ Well-known Item Metadata
Item 要素 (MSBuild) Item Element (MSBuild)
ItemMetadata 要素 (MSBuild) ItemMetadata Element (MSBuild)
バッチ Batching
MSBuild の概念 MSBuild Concepts
MSBuild リファレンスMSBuild Reference