Elementmetadaten bei der Batchverarbeitung von Aufgaben
Mit MSBuild können Sie Elementlisten auf der Grundlage von Elementmetadaten in verschiedene Kategorien, so genannte Batches, unterteilen und eine Aufgabe mit jedem Batch ausführen. Teilweise ist es schwer zu erkennen, welche Elemente mit welchem Batch übergeben werden. In diesem Thema werden die folgenden allgemeinen Szenarien behandelt, bei denen Batchverarbeitung eine Rolle spielt.
Unterteilen einer Elementliste in Batches
Unterteilen von mehreren Elementlisten in Batches
Batchverarbeitung von jeweils einem Element
Filtern von Elementlisten
Weitere Informationen zur Batchverarbeitung mit MSBuild finden Sie unter MSBuild-Batchverarbeitung.
Unterteilen einer Elementliste in Batches
Bei der Batchverarbeitung kann eine Elementliste auf der Grundlage von Elementmetadaten in verschiedene Batches unterteilt und jeder Batch separat an eine Aufgabe übergeben werden. Dies ist hilfreich für die Erstellung von Satellitenassemblys.
Das folgende Beispiel zeigt, wie eine Elementliste auf der Grundlage von Elementmetadaten in Batches unterteilt wird. Die ExampColl-Elementliste wird auf der Grundlage der Number-Elementmetadaten in drei Batches unterteilt. Durch das Vorhandensein von %(ExampColl.Number) im Text-Attribut wird MSBuild mitgeteilt, dass die Batchverarbeitung ausgeführt werden soll. Die ExampColl-Elementliste wird auf der Grundlage der Number-Metadaten in drei Batches unterteilt, von denen jeder separat an die Aufgabe übergeben wird.
<Project
xmlns="https://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>
Die Message-Aufgabe-Aufgabe zeigt die folgenden Informationen an:
Number: 1 -- Items in ExampColl: Item1;Item4
Number: 2 -- Items in ExampColl: Item2;Item5
Number: 3 -- Items in ExampColl: Item3;Item6
Unterteilen von mehreren Elementlisten in Batches
MSBuild kann mehrere Elementlisten in Batches unterteilen, die auf denselben Metadaten basieren. Dies erleichtert die Unterteilung verschiedener Elementlisten in Batches, um mehrere Assemblys zu erstellen. Beispielsweise könnten Sie über eine Elementliste von CS-Dateien sowie über eine Elementliste von Ressourcendateien verfügen, die jeweils in einen Anwendungsbatch und einen Assemblybatch unterteilt sind. Sie könnten die Batchverarbeitung dann verwenden, um diese Elementlisten an eine Aufgabe zu übergeben und sowohl die Anwendung als auch die Assembly zu erstellen.
Tipp
Wenn eine Elementliste, die an eine Aufgabe übergeben wird, keine Elemente mit den referenzierten Metadaten enthält, wird jedes einzelne Element in dieser Elementliste an jeden Batch übergeben.
Das folgende Beispiel zeigt, wie mehrere Elementlisten auf Grundlage von Elementmetadaten in Batches unterteilt werden. Die ExampColl- und die ExampColl2-Elementlisten werden auf der Grundlage der Number-Elementmetadaten in drei Batches unterteilt. Durch das Vorhandensein von %(Number) im Text-Attribut wird MSBuild mitgeteilt, dass die Batchverarbeitung ausgeführt werden soll. Die ExampColl- und die ExampColl2-Elementlisten werden auf der Grundlage der Number-Metadaten in drei Batches unterteilt, von denen jeder separat an die Aufgabe übergeben wird.
<Project
xmlns="https://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>
Die Message-Aufgabe-Aufgabe zeigt die folgenden Informationen an:
Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4
Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5
Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6
Batchverarbeitung jeweils eines Elements
Die Batchverarbeitung kann auch auf der Basis von bekannten Elementmetadaten ausgeführt werden, die jedem Element bei der Erstellung zugewiesen werden. Dadurch wird gewährleistet, dass jedes Element in einer Auflistung einige Metadaten aufweist, die für die Batchverarbeitung verwendet werden. Der Identity-Metadatenwert ist für jedes Element eindeutig, und er ist hilfreich, um jedes Element in einer Elementliste einem separaten Batch zuzuordnen. Eine vollständige Liste bekannter Elementmetadaten finden Sie unter MSBuild bekannte Elementmetadaten.
Im folgenden Beispiel wird veranschaulicht, wie die einzelnen Elemente in einer Elementliste jeweils separat als Batch verarbeitet werden. Da der Identity-Metadatenwert der einzelnen Elemente eindeutig ist, wird die ExampColl -Elementliste in sechs Batches unterteilt, von denen jeder ein Element der Elementliste enthält. Durch das Vorhandensein von %(Identity) im Text-Attribut wird MSBuild mitgeteilt, dass die Batchverarbeitung ausgeführt werden soll.
<Project
xmlns="https://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>
Die Message-Aufgabe-Aufgabe zeigt die folgenden Informationen an:
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
Filtern von Elementlisten
Bevor Elemente an eine Aufgabe übergeben werden, können mithilfe der Batchverarbeitung bestimmte Elemente aus einer Elementliste herausgefiltert werden. Durch das Filtern nach dem bekannten Extension-Elementmetadaten-Wert haben Sie beispielsweise die Möglichkeit, eine Aufgabe nur für Dateien mit einer bestimmten Erweiterung auszuführen.
Im folgenden Beispiel wird veranschaulicht, wie Sie eine Elementliste auf der Grundlage von Elementmetadaten in Batches unterteilen und diese Batches anschließend bei der Übergabe an eine Aufgabe filtern. Die ExampColl-Elementliste wird auf der Grundlage der Number-Elementmetadaten in drei Batches unterteilt. Durch das Condition-Attribut der Aufgabe wird festgelegt, dass nur Batches mit dem Number-Elementmetadaten-Wert 2 an die Aufgabe übergeben werden.
<Project
xmlns="https://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>
Die Message-Aufgabe-Aufgabe zeigt die folgenden Informationen an:
Items in ExampColl: Item2;Item5
Siehe auch
Referenz
MSBuild bekannte Elementmetadaten
ItemMetadata-Element (MSBuild)