工作批次處理中的項目中繼資料
MSBuild 能夠根據項目中繼資料將項目清單分割成不同的分類或批次,並且一次執行每一批次的一項工作。要了解確實傳遞哪一個批次的哪些項目,可能會有些混淆。本主題涵蓋下列包含批次處理的常見案例。
將項目清單分割成批次
將數個項目清單分割成批次
一次批次處理一個項目
篩選項目清單
如需使用 MSBuild 批次處理的詳細資訊,請參閱 MSBuild 批次處理。
將項目清單分割成批次
批次處理允許您根據項目中繼資料將項目清單分割成不同的批次,並且分別將各批次傳遞至工作中。這在建置附屬組件時相當實用。
下列範例說明如何根據項目中繼資料將項目清單分割成批次。ExampColl 項目清單會根據 Number 項目中繼資料分割成三個批次。Text 屬性中的 %(ExampColl.Number) 會告知 MSBuild 應執行批次處理。ExampColl 項目清單會根據 Number 中繼資料分割成三個批次,且每一個批次會分別傳遞至工作。
<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>
訊息工作 工作顯示下列資訊:
Number: 1 -- Items in ExampColl: Item1;Item4
Number: 2 -- Items in ExampColl: Item2;Item5
Number: 3 -- Items in ExampColl: Item3;Item6
將數個項目清單分割成批次
MSBuild 可以根據相同的中繼資料,將多個項目清單分割成批次。如此方便您將不同的項目清單分割成批次,以建置多個組件。例如,您可以將 .cs 檔的項目清單分割成應用程式批次和組件批次,以及將資源檔的項目清單分割成應用程式批次和組件批次。接著即可使用批次處理將這些項目清單傳遞至一項工作,並且建置應用程式和組件。
注意事項 |
---|
如果傳遞至工作的項目清單未包含擁有參考中繼資料的項目,則會將該項目清單中的每一個項目傳遞至每一個批次。 |
下列範例說明如何根據項目中繼資料將多個項目清單分割成批次。ExampColl 和 ExampColl2 項目清單會根據 Number 項目中繼資料各分割成三個批次。Text 屬性中的 %(Number) 會告知 MSBuild 應執行批次處理。ExampColl 和 ExampColl2 項目清單會根據 Number 中繼資料分割成三個批次,且每一個批次會分別傳遞至工作。
<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>
訊息工作 工作顯示下列資訊:
Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4
Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5
Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6
一次批次處理一個項目
批次處理也可以在建立時指派給每個項目的已知項目中繼資料上執行。如此能保證集合中的每一個項目都有中繼資料可用來進行批次處理。每一個項目都有唯一的 Identity 中繼資料值,在將項目清單中的每個項目分割成不同批次時相當實用。如需已知項目中繼資料的完整清單,請參閱 MSBuild 已知的項目中繼資料。
下列範例說明如何一次批次處理一個項目清單中的項目。由於每一個項目的 Identity 中繼資料值都是唯一的,因此 ExampColl 項目清單會分割成六個批次,且各批次包含該項目清單的一個項目。Text 屬性中顯示的 %(Identity) 指出 MSBuild 應該執行批次處理。
<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>
訊息工作 工作顯示下列資訊:
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
篩選項目清單
在傳遞至工作之前,可使用批次處理篩選出項目清單中的特定項目。例如,篩選 Extension 已知項目中繼資料可讓您只在特定副檔名的檔案上執行工作。
下列範例說明如何根據項目中繼資料將項目清單分割成批次,然後在傳遞至工作時篩選這些批次。ExampColl 項目清單會根據 Number 項目中繼資料分割成三個批次。工作的 Condition 屬性 (Attribute) 會指定只將 Number 項目中繼資料值為 2 的批次傳遞至工作。
<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>
訊息工作 工作顯示下列資訊:
Items in ExampColl: Item2;Item5