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