MSBuild 批处理

更新:2007 年 11 月

MSBuild 能够根据项元数据将项集合划分为不同的类别或批,并在每批中一次运行一个目标或任务。

任务批处理

任务批处理使您能够简化项目文件,因为它可以将项集合划分为不同的批并将各个批分别传递到任务中。这意味着项目文件只需声明任务及其属性一次,但却可以多次运行它。

通过在一个任务属性中使用 %(项元数据名称) 表示法,指定让 MSBuild 使用任务执行批处理。下面的示例根据 Color 项元数据值将 Example 项集合拆分为多个批,并将各个批分别传递给 MyTask 任务。

说明:

如果不在任务属性中的其他位置引用项集合,或者元数据名称可能不明确,则可使用 %(项集合.项元数据名称) 表示法完全限定用于进行批处理的项元数据值。

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

有关更为具体的批处理示例,请参见如何:使用项元数据对任务进行批处理

目标批处理

MSBuild 在运行目标之前会检查该目标的输入和输出是否是最新的。如果输入和输出都是最新的,将跳过该目标。如果目标内的任务使用批处理,MSBuild 需要确定项的各个批的输入和输出是否都是最新的。否则,将在每次命中目标时执行目标。

下面的示例演示一个 Target 元素,它包含一个具有 %(项元数据名称) 表示法的 Outputs 属性。MSBuild 将根据 Color 项元数据将 Example 项集合划分为多个批,并分析各个批的输出文件的时间戳。如果某个批的输出不是最新的,将运行目标。否则,将跳过该目标。

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask"
        Inputs="@(Example)"
        Outputs="%(Color)\MyFile.txt">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

有关目标批处理的其他示例,请参见如何:使用项元数据对目标进行批处理

请参见

概念

MSBuild 高级概念

参考

ItemMetadata 元素 (MSBuild)

其他资源

MSBuild 概念

MSBuild 参考