Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program MSBuild może podzielić listy elementów na różne kategorie lub partie na podstawie metadanych elementu i uruchomić zadanie jednorazowo z każdą partią. Może to być mylące, aby zrozumieć dokładnie, jakie elementy są przekazywane do której partii. W tym temacie opisano następujące typowe scenariusze obejmujące dzielenie na partie.
Dzielenie listy elementów na partie
Dzielenie kilku list elementów na partie
Dzielenie na partie jednego elementu naraz
Filtrowanie list elementów
Aby uzyskać więcej informacji na temat dzielenia na partie przy użyciu programu MSBuild, zobacz Batching (Przetwarzanie wsadowe).
Dzielenie listy elementów na partie
Przetwarzanie wsadowe umożliwia podzielenie listy elementów na różne partie na podstawie metadanych elementu i przekazanie każdej partii do zadania oddzielnie. Jest to przydatne w przypadku tworzenia zestawów satelitarnych.
W poniższym przykładzie pokazano, jak podzielić listę elementów na partie na podstawie metadanych elementu. Lista ExampColl elementów jest podzielona na trzy partie na Number podstawie metadanych elementu. Obecność %(ExampColl.Number)w atrybucie Text powiadamia MSBuild, że należy wykonać przetwarzanie wsadowe. Lista ExampColl elementów jest podzielona na trzy partie na Number podstawie metadanych, a każda partia jest przekazywana oddzielnie do zadania.
<Project>
<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>
Zadanie Komunikat wyświetla następujące informacje:
Number: 1 -- Items in ExampColl: Item1;Item4
Number: 2 -- Items in ExampColl: Item2;Item5
Number: 3 -- Items in ExampColl: Item3;Item6
Podziel kilka list elementów na partie
Program MSBuild może podzielić wiele list elementów na partie na podstawie tych samych metadanych. Dzięki temu można łatwo podzielić różne listy elementów na partie w celu utworzenia wielu zestawów. Na przykład można mieć listę elementów plików cs podzielonych na partię aplikacji i partię zestawów oraz listę elementów plików zasobów podzielonych na partię aplikacji i partię zestawów. Następnie można użyć przetwarzania wsadowego, aby przekazać te listy elementów do jednego zadania i skompilować zarówno aplikację, jak i zestaw.
Uwaga
Jeśli lista elementów przekazywana do zadania nie zawiera żadnych elementów z przywoływanymi metadanymi, każdy element na tej liście elementów jest przekazywany do każdej partii.
W poniższym przykładzie pokazano, jak podzielić wiele list elementów na partie na podstawie metadanych elementu. ExampColl Listy elementów i ExampColl2 są podzielone na trzy partie na Number podstawie metadanych elementu. Obecność %(Number)w atrybucie Text powiadamia MSBuild, że należy wykonać przetwarzanie wsadowe. ExampColl Listy elementów i ExampColl2 są podzielone na trzy partie na Number podstawie metadanych, a każda partia jest przekazywana oddzielnie do zadania.
<Project>
<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>
Zadanie Komunikat wyświetla następujące informacje:
Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4
Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5
Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6
Partia jednego elementu naraz
Przetwarzanie wsadowe można również wykonać na dobrze znanych metadanych elementu, które są przypisywane do każdego elementu podczas tworzenia. Gwarantuje to, że każdy element w kolekcji będzie miał pewne metadane do użycia do dzielenia na partie. Wartość metadanych jest przydatna Identity do dzielenia każdego elementu na liście elementów na oddzielną partię. Aby uzyskać pełną listę dobrze znanych metadanych elementu, zobacz Dobrze znane metadane elementu.
W poniższym przykładzie pokazano, jak wsadować każdy element na liście elementów pojedynczo. Lista ExampColl elementów jest podzielona na sześć partii, każda partia zawierająca jeden element listy elementów. Obecność %(Identity)w atrybucie Text powiadamia MSBuild, że należy wykonać przetwarzanie wsadowe.
<Project>
<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>
Zadanie Komunikat wyświetla następujące informacje:
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
Nie ma jednak gwarancji, że jest unikatowa; Identity jego wartość jest obliczaną ostateczną wartością atrybutu Include . W związku z tym, jeśli jakiekolwiek Include atrybuty są używane wiele razy, są one wsadowe razem. Jak pokazano w poniższym przykładzie, ta technika wymaga Include , aby atrybuty są unikatowe dla każdego elementu w grupie. Aby zilustrować ten punkt, rozważ następujący kod:
<Project>
<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>
Dane wyjściowe pokazują, że pierwsze dwa elementy znajdują się w tej samej partii, ponieważ Include atrybut jest taki sam dla nich:
test.proj(15,5): warning : 1: 1;1: 2
test.proj(15,5): warning : 2: 3
Filtrowanie list elementów
Przetwarzanie wsadowe może służyć do filtrowania niektórych elementów z listy elementów przed przekazaniem ich do zadania. Na przykład filtrowanie dla dobrze znanej Extension wartości metadanych elementu umożliwia uruchomienie zadania tylko dla plików z określonym rozszerzeniem.
W poniższym przykładzie pokazano, jak podzielić listę elementów na partie na podstawie metadanych elementu, a następnie filtrować te partie po przekazaniu ich do zadania. Lista ExampColl elementów jest podzielona na trzy partie na Number podstawie metadanych elementu. Atrybut Condition zadania określa, że tylko partie z wartością Number 2 metadanych elementu zostaną przekazane do zadania
<Project>
<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>
Zadanie Komunikat wyświetla następujące informacje:
Items in ExampColl: Item2;Item5