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>
有关目标批处理的其他示例,请参见如何:使用项元数据对目标进行批处理。