包含使用者定義的項目及其中繼資料。 MSBuild 專案中使用的每個專案都必須指定為元素的 ItemGroup 子系。
<發射>
<項目組>
<款>
語法
<Item Include="*.cs"
Exclude="MyFile.cs"
Condition="'String A'=='String B'">
<ItemMetadata1>...</ItemMetadata1>
<ItemMetadata2>...</ItemMetadata2>
</Item>
將中繼資料指定為屬性
您可以將項目中繼資料指定為子元素的屬性。 任何名稱與目前屬性清單不衝突的中繼資料都可以表示為屬性。
例如,若要指定 NuGet 套件清單,您通常會使用類似下列語法的專案。
<ItemGroup>
<PackageReference Include="Newtonsoft.Json">
<Version>9.0.1-beta1<Version>
</PackageReference>
</ItemGroup>
不過,現在您可以將 Version 中繼資料作為屬性傳遞,例如在下列語法中:
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="9.0.1-beta1" />
</ItemGroup>
屬性和元素
下列各節說明屬性、子元素和父元素。
Attributes
| Attribute | Description |
|---|---|
Include |
選擇性屬性。 要包含在項目清單中的檔案或萬用字元。 |
Exclude |
選擇性屬性。 要從項目清單中排除的檔案或萬用字元。 |
Condition |
選擇性屬性。 要評估的條件。 如需詳細資訊,請參閱條件。 |
Remove |
選擇性屬性。 要從項目清單中移除的檔案或萬用字元。 |
MatchOnMetadata |
選擇性屬性。 修改 Remove 參考其他項目的屬性,以比對指定的中繼資料名稱,而不是比對參考項目的值。 只有在與僅包含其他項目參考的屬性一起 Remove 指定時,此屬性才有效 (例如 Remove="@(Compile);@(Content)")。 更多詳細資訊請參閱 項目。 |
MatchOnMetadataOptions |
選擇性屬性。 指定 所使用的 MatchOnMetadata字串比對策略。 可能的值為 CaseSensitive、 CaseInsensitive或 PathLike。 預設值是 CaseInsensitive。 |
KeepDuplicates |
選擇性屬性。 指定如果項目是現有項目的精確重複項,則是否應將其新增至目標群組。 如果來源和目標項目具有相同的 Include值,但中繼資料不同,則即使設定為 false,也會KeepDuplicates新增項目。 如需詳細資訊,請參閱 專案。只有在為 中的 ItemGroupTarget項目指定時,此屬性才有效。 |
KeepMetadata |
選擇性屬性。 要新增至目標項目的來源項目的中繼資料。 只有在分號分隔清單中指定名稱的中繼資料才會從來源項目傳輸到目標項目。 如需詳細資訊,請參閱 專案。 只有在為 中的 ItemGroupTarget項目指定時,此屬性才有效。 |
RemoveMetadata |
選擇性屬性。 來源項目的中繼資料,不會傳輸至目標項目。 所有中繼資料都會從來源項目傳輸到目標項目,但名稱包含在分號分隔名稱清單中的中繼資料除外。 如需詳細資訊,請參閱 專案。 只有在為 中的 ItemGroupTarget項目指定時,此屬性才有效。 |
Update |
選擇性屬性。 (僅適用於 Visual Studio 2017 或更新版本中的 .NET Core 專案。 可讓您修改項目的中繼資料;通常用來在最初指定一組項目之後覆寫特定項目的預設中繼資料 (例如使用萬用字元)。 只有在針對不 Target在 中的項目ItemGroup指定此屬性時,此屬性才有效。 |
子元素
| 元素 | Description |
|---|---|
| 項目中繼資料 | 使用者定義的項目中繼資料索引鍵,其中包含項目中繼資料值。 項目中可能有零個或多個 ItemMetadata 元素。 |
MSBuild 會將專案元素上的子元素解譯為專案中繼資料。
父元素
| 元素 | Description |
|---|---|
| 項目組 | 專案的分組元素。 |
備註
Item 元素會定義建置系統的輸入,並根據其使用者定義的集合名稱分組為專案集合。 這些項目集合可作為工作的參數,這些 任務使用集合中的個別項目來執行建置程序的步驟。 如需詳細資訊,請參閱 專案。
使用表示法 @(<myType>) 可將 myType> 類型的<項目集合展開為以分號分隔的字串清單,並傳遞至參數。 如果參數類型 string為 ,則參數的值是元素清單,以分號分隔。 如果參數是字串 (string[]) 的陣列,則每個元素都會根據分號的位置插入陣列中。 如果工作參數的類型 ITaskItem[]為 ,則值是項目集合的內容以及附加的任何中繼資料。 若要使用分號以外的字元來分隔每個項目,請使用語法 @(<myType>, '<separator>')。
MSBuild 引擎可以評估萬用字元, * 例如 和 和 ? 遞迴萬用字元,例如 /**/*.cs。 如需詳細資訊,請參閱 專案。
範例
下列程式碼範例示範如何宣告兩個類型的 CSFile. 第二個宣告的項目包含已 MyMetadata 設定為 HelloWorld的中繼資料。
<ItemGroup>
<CSFile Include="engine.cs; form.cs" />
<CSFile Include="main.cs" >
<MyMetadata>HelloWorld</MyMetadata>
</CSFile>
</ItemGroup>
下列程式碼範例示範如何使用屬性 Update 來修改透過 glob 包含的名為 somefile.cs 的檔案中的中繼資料。 (僅適用於 Visual Studio 2017 或更新版本中的 .NET Core 專案。
<ItemGroup>
<Compile Update="somefile.cs"> // or Update="*.designer.cs"
<MetadataKey>MetadataValue</MetadataKey>
</Compile>
</ItemGroup>