MSBuild 项

更新:2007 年 11 月

项表示对生成系统的输入,这些项根据其用户定义的集合名称被组合为项集合。这些项集合可以用作任务的参数,任务使用集合中包含的各个项执行生成过程的步骤。

在项目文件中创建项

项是通过创建具有该项的名称的 ItemGroup 元素的子级元素在项目文件中声明的。元素的 Include 属性指定该项集合中要包括哪些文件。例如,下面的代码创建一个名为 Compile 的项集合,其中包括两个文件。

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

下面的代码通过在一个 Include 属性中同时声明两个文件(用分号分隔),创建相同的项集合。

<ItemGroup>
    <Compile Include = "file1.cs;file2.cs"/>
</ItemGroup>

在项目文件中引用项

在整个项目文件中使用语法 @(ItemCollectionName) 引用项集合。例如,可以使用 @(Compile) 引用上一个示例中的项集合。该语法使您可以通过将项集合指定为任务的参数,将该项集合传递给该任务。有关更多信息,请参见如何:使用通配符生成目录中的所有文件

默认情况下,在展开时,项集合中的项由分号 (;) 分隔。使用语法 @(项集合名称, '分隔符') 指定默认分隔符以外的分隔符。有关更多信息,请参见如何:显示用逗号分隔的项集合

使用通配符指定项

您可以使用 **、* 和 ? 通配符将一组文件指定为生成的输入,而不是分别列出各个文件。例如,要将同一目录中的所有 .cs 文件或 .vb 文件指定为项目文件,请在项目文件中使用下列元素之一:

<CSFile Include="*.cs"/>

- 或 -

<VBFile Include="*.vb"/>

说明:

只有在指定生成的输入时,才可以对项使用通配符。例如,不能使用通配符来指定 Csc 任务中 Sources 参数的输入。MSBuild 可以接受通配符作为参数值,但会将它们作为字符串对待,而不会计算它们。下面的示例使用字符串 *.cs 作为 Sources 参数值。

<Target Name="Compile">
    <CSC Sources="*.cs" />
</Target>

有关通配符的更多信息,请参见如何:使用通配符生成目录中的所有文件

使用 Exclude 属性

项也可以包含 Exclude 属性,该属性将特定的文件排除在项集合之外。当与通配符结合使用时,Exclude 属性很有用。例如,下面的代码添加目录中除 DoNotBuild.cs 文件外的所有 .cs 文件。

<ItemGroup>
    <CSFile
        Include="*.cs"
        Exclude="DoNotBuild.cs"/>
</ItemGroup>

有关更多信息,请参见如何:在一个目录中生成所有文件,只有一个文件除外

项元数据

除了从 IncludeExclude 属性收集的信息,项还可能包含元数据。这些元数据可以供需要更多关于项的信息的任务使用,或者用来批处理任务和目标。有关批处理的更多信息,请参见 MSBuild 批处理

项元数据是通过创建作为该项的子元素的具有元数据名称的元素在项目文件中声明的。项可以由零个或多个元数据值。例如,下面的元素具有值为 Fr 的 Culture 元数据。

<ItemGroup>
    <CSFile Include="main.cs">
        <Culture>Fr</Culture>
    </CSFile>
</ItemGroup>

在项目文件中引用项元数据

在整个项目文件中使用语法 %(ItemMetadataName) 引用项元数据。当存在多义性时,可以使用项集合的名称进行限定,例如 %(项集合名称.项元数据名称)。下面的示例使用 Display 元数据对 Message 任务进行批处理。有关使用项元数据进行批处理的更多信息,请参见如何:使用项元数据对任务进行批处理

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <Stuff Include="One.cs" >
            <Display>false</Display>
        </Stuff>
        <Stuff Include="Two.cs">
            <Display>true</Display>
        </Stuff>
    </ItemGroup>
    <Target Name="Batching">
        <Message Text="@(Stuff)" Condition=" '%(Display)' == 'true' "/>
    </Target>
</Project>

已知的项元数据

每当将项添加到项集合中时,该项即被创建,并被赋予某些已知的项元数据,如 %(Filename),其中包含该项的文件名。有关已知项元数据的完整列表,请参见 MSBuild 常见项的元数据

转换项集合

项集合可以转换为新的项集合。例如,使用类似 @(CppFiles -> '%(Filename).obj') 的表达式,.cpp 文件的项集合可以转换为 .obj 文件的集合。有关更多信息,请参见 MSBuild 转换

请参见

任务

如何:使用通配符生成目录中的所有文件

如何:在一个目录中生成所有文件,只有一个文件除外

概念

MSBuild 批处理

MSBuild 任务

参考

ItemGroup 元素 (MSBuild)

Item 元素 (MSBuild)

ItemMetadata 元素 (MSBuild)

MSBuild 常见项的元数据