Item 元素 (MSBuild)

包含用户定义的项及其元数据。 必须在 MSBuild 项目中使用的每个项都指定为元素的 ItemGroup 子级。

<项目>
  <ItemGroup>
   <项目>

Syntax

<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>

属性和元素

以下部分介绍属性、子元素和父元素。

特性

Attribute Description
Include 可选属性。

要包含在项列表中的文件或通配符。
Exclude 可选属性。

要从项列表中排除的文件或通配符。
Condition 可选属性。

要评估的条件。 有关详细信息,请参阅条件
Remove 可选属性。

要从项列表中删除的文件或通配符。

MatchOnMetadata 可选属性。

Remove修改引用其他项以匹配指定元数据名称的属性,而不是对引用项的值进行匹配。

仅当此属性与 Remove 仅包含对其他项(例如, Remove="@(Compile);@(Content)")的引用的属性一起指定时,此属性才有效。 中的更多详细信息。
MatchOnMetadataOptions 可选属性。

指定用于 MatchOnMetadata的字符串匹配策略。 可能的值为 CaseSensitiveCaseInsensitivePathLike。 默认值为 CaseInsensitive
KeepDuplicates 可选属性。

指定项是否应添加到目标组(如果该项是现有项的完全重复项)。 如果源项和目标项具有相同 的值但元数据不同,则即使 设置为 ,也会添加该项。 有关详细信息,请参阅

仅当为某个ItemGroupTarget项指定时,此属性才有效。
KeepMetadata 可选属性。

要添加到目标项的源项的元数据。 只有在以分号分隔的列表中指定名称的元数据才会从源项传输到目标项。 有关详细信息,请参阅

仅当为某个ItemGroupTarget项指定时,此属性才有效。
RemoveMetadata 可选属性。

要不传输到目标项的源项的元数据。 所有元数据都从源项传输到目标项,但名称包含在以分号分隔的名称列表中的元数据除外。 有关详细信息,请参阅

仅当为某个ItemGroupTarget项指定时,此属性才有效。
Update 可选属性。 (仅适用于 Visual Studio 2017 或更高版本中的 .NET Core 项目。

使你能够修改项的元数据;通常用于在最初指定一组项(如通配符)后重写特定项的默认元数据。

仅当为不在Target某个项中指定的ItemGroup项时,此属性才有效。

子元素

元素 Description
ItemMetadata 用户定义的项元数据键,其中包含项元数据值。 项中可能有零个或多个 ItemMetadata 元素。

MSBuild 将项元素上的子元素解释为项元数据。

父元素

元素 Description
ItemGroup 项的分组元素。

注解

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>

另请参阅