Metadata položek v dávkování úloh

Nástroj MSBuild má možnost rozdělit seznamy položek do různých kategorií nebo dávek na základě metadat položek a spustit úlohu jednou s každou dávkou. Může být matoucí pochopit, které položky se předávají s jakou dávkou. Toto téma se věnuje následujícím běžným scénářům, které zahrnují dávkování.

  • Rozdělení seznamu položek na dávky

  • Rozdělení několika seznamů položek do dávek

  • Dávkování jedné položky najednou

  • Filtrování seznamů položek

Další informace o dávkování pomocí nástroje MSBuild naleznete v tématu Dávkování.

Rozdělení seznamu položek do dávek

Dávkování umožňuje rozdělit seznam položek do různých dávek na základě metadat položek a předat jednotlivé dávky do úkolu samostatně. To je užitečné pro vytváření satelitních sestavení.

Následující příklad ukazuje, jak rozdělit seznam položek na dávky na základě metadat položek. Seznam ExampColl položek je rozdělen do tří dávek na Number základě metadat položky. Přítomnost atributu %(ExampColl.Number)Text oznámí nástroji MSBuild, že má být provedeno dávkování. Seznam ExampColl položek je rozdělený do tří dávek na Number základě metadat a každá dávka se předá do úkolu samostatně.

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

Úloha Zpráva zobrazí následující informace:

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

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

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

Rozdělení několika seznamů položek do dávek

Nástroj MSBuild může rozdělit více seznamů položek na dávky na základě stejných metadat. To usnadňuje rozdělení různých seznamů položek do dávek pro sestavení více sestavení. Můžete mít například seznam položek souborů .cs rozdělený do dávky aplikace a dávky sestavení a seznam položek souborů prostředků rozdělený do dávky aplikace a dávky sestavení. Pomocí dávkování pak můžete tyto seznamy položek předat do jednoho úkolu a sestavit aplikaci i sestavení.

Poznámka:

Pokud seznam položek předaný do úkolu neobsahuje žádné položky s odkazovanými metadaty, každá položka v tomto seznamu položek se předá do každé dávky.

Následující příklad ukazuje, jak rozdělit více seznamů položek do dávek na základě metadat položek. ExampColl2 Seznamy ExampColl položek jsou rozdělené do tří dávek na Number základě metadat položek. Přítomnost atributu %(Number)Text oznámí nástroji MSBuild, že má být provedeno dávkování. ExampColl2 Seznamy ExampColl položek jsou rozděleny do tří dávek na Number základě metadat a každá dávka se předává do úkolu samostatně.

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

Úloha Zpráva zobrazí následující informace:

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

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

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

Batch one item at a time

Dávkování lze provést také u známých metadat položek, která jsou přiřazena ke každé položce při vytváření. To zaručuje, že každá položka v kolekci bude mít určitá metadata, která se mají použít pro dávkování. Hodnota Identity metadat je užitečná pro rozdělení každé položky v seznamu položek do samostatné dávky. Úplný seznam známých metadat položek najdete v tématu Metadata známých položek.

Následující příklad ukazuje, jak dávkot každou položku v seznamu položek po jednom. Seznam ExampColl položek je rozdělený do šesti dávek, přičemž každá dávka obsahuje jednu položku seznamu položek. Přítomnost atributu %(Identity)Text oznámí nástroji MSBuild, že má být provedeno dávkování.

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

Úloha Zpráva zobrazí následující informace:

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

Není však zaručeno, Identity že je jedinečná; její hodnota je vyhodnocená konečná hodnota atributu Include . Proto pokud se některé Include atributy používají vícekrát, jsou dávkové dohromady. Jak ukazuje následující příklad, tato technika vyžaduje Include , aby atributy byly jedinečné pro každou položku ve skupině. Pro ilustraci tohoto bodu zvažte následující kód:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Item Include="1">
      <M>1</M>
    </Item>
    <Item Include="1">
      <M>2</M>
    </Item>
    <Item Include="2">
      <M>3</M>
    </Item>
  </ItemGroup>

  <Target Name="Batching">
    <Warning Text="@(Item->'%(Identity): %(M)')" Condition=" '%(Identity)' != '' "/>
  </Target>
</Project>

Výstup ukazuje, že první dvě položky jsou ve stejné dávce, protože Include atribut je pro ně stejný:

test.proj(15,5): warning : 1: 1;1: 2
test.proj(15,5): warning : 2: 3

Filtrování seznamů položek

Dávkování lze použít k vyfiltrování určitých položek ze seznamu položek před jeho předáním úkolu. Filtrování hodnoty Extension metadat známých položek například umožňuje spustit úlohu pouze na souborech s určitým rozšířením.

Následující příklad ukazuje, jak rozdělit seznam položek na dávky na základě metadat položek a potom tyto dávky filtrovat při jejich předání do úkolu. Seznam ExampColl položek je rozdělen do tří dávek na Number základě metadat položky. Atribut Condition úkolu určuje, že do úkolu budou předány pouze dávky s Number hodnotou 2 metadat položky.

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

Úloha Zpráva zobrazí následující informace:

Items in ExampColl: Item2;Item5