Item 項目 (MSBuild)

包含使用者定義的項目及其中繼資料。 MSBuild 專案中使用的每個項目,都必須指定為 ItemGroup 元素的子系。

<計畫>
 <ItemGroup>
  <項目>

語法

<Item Include="*.cs"
        Exclude="MyFile.cs"
        Condition="'String A'=='String B'">
    <ItemMetadata1>...</ItemMetadata1>
    <ItemMetadata2>...</ItemMetadata2>
</Item>

將中繼資料指定為屬性

在 MSBuild 15.1 或更新版本中,如果任何中繼資料的名稱未與目前的屬性清單衝突,您即可選擇將其表示為屬性。

例如,若要指定 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>

屬性和元素

下列章節說明屬性、子元素和父元素。

屬性

屬性 描述
Include 選用屬性。

要包含在項目清單中的檔案或萬用字元。
Exclude 選用屬性。

要從項目清單中排除的檔案或萬用字元。
Condition 選用屬性。

要評估的條件。 如需詳細資訊,請參閱條件
Remove 選用屬性。

要從項目清單移除的檔案或萬用字元。

MatchOnMetadata 選用屬性。

修改參考其他項目的 Remove 屬性,使其與指定的中繼資料名稱相符,而不是與參考項目的值相符。

此屬性只有在與僅包含其他項目 (例如,Remove="@(Compile);@(Content)") 所參考的 Remove 屬性一起指定時才有效。 項目中的詳細資料。
MatchOnMetadataOptions 選用屬性。

指定 MatchOnMetadata 所使用的字串比對原則。 可能的值為 CaseSensitiveCaseInsensitivePathLike。 預設值是 CaseInsensitive
KeepDuplicates 選用屬性。

指定項目如果與現有項目完全重複,是否應加入目標群組。 如果來源和目標項目具有相同的 Include 值,但中繼資料不同,則即使 KeepDuplicates 設定為 false,也會加入該項目。 如需詳細資訊,請參閱項目

這個屬性只有在針對 ItemGroup 中的 Target 項目指定時才有效。
KeepMetadata 選用屬性。

要加入目標項目之來源項目的中繼資料。 只有其名稱指定在分號分隔清單中的中繼資料,會從來源項目傳輸到目標項目。 如需詳細資訊,請參閱項目

這個屬性只有在針對 ItemGroup 中的 Target 項目指定時才有效。
RemoveMetadata 選用屬性。

不要傳輸到目標項目之來源項目的中繼資料。 所有中繼資料會從來源項目傳輸到目標項目,名稱包含在以分號分隔的名稱清單中之中繼資料除外。 如需詳細資訊,請參閱項目

這個屬性只有在針對 ItemGroup 中的 Target 項目指定時才有效。
Update 選用屬性。 (僅適用於 Visual Studio 2017 或更新版本的 .NET Core 專案)。

可讓您修改專案的元數據;一開始指定一組項目之後,通常會用來覆寫特定項目的預設元數據(例如通配符)。

僅有當項目所在的 ItemGroup 不屬於 Target 時,針對該項目指定這個屬性才有效。

子元素

元素 描述
ItemMetadata 使用者定義的項目中繼資料索引鍵,其中含有項目中繼資料值。 項目中可能有零個或多個 ItemMetadata 項目。

父元素

元素 描述
ItemGroup 項目的群組項目。

備註

Item 項目定義建置系統的輸入,且會依據使用者定義的集合名稱,分組成為項目集合。 這些項目集合可以用來做為工作的參數,工作會使用集合中個別的項目來執行建置程序的步驟。 如需詳細資訊,請參閱項目

使用標記法 @(<myType>),可讓類型 <myType> 的項目集合展開為以分號分隔的字串清單,並傳遞至參數。 如果參數的類型是 string,則參數的值會是以分號分隔的項目清單。 如果參數是字串陣列 (string[]),則每個項目都會根據分號的位置,插入到陣列中。 如果工作參數的類型是 ITaskItem[],則值就是項目集合的內容再加上任何附加的中繼資料。 若要使用分號以外的字元來分隔每個項目,請使用 @(<myType>, '<分隔符號>') 語法。

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>

另請參閱