更新:2007 年 11 月
MSBuild 能够对生成目标的输入和输出执行依赖项分析。如果确定了目标的输入和输出都是最新的,将跳过该目标并继续生成过程。Target 元素使用 Inputs 和 Outputs 属性来指定在依赖项分析过程中要检查的项。
如果目标包含使用批处理的项作为输入或输出的任务,该目标的 Target 元素应当在其 Inputs 或 Outputs 属性中使用批处理,以便 MSBuild 能够跳过已经是最新的项批。
批处理目标
下面的示例包含一个名为 Res 的项集合,该项集合根据 Culture 项元数据被划分为两个批。其中每个批分别传递到 AL 任务中,该任务为每个批分别创建一个输出程序集。通过对 Target 元素的 Outputs 属性使用批处理,MSBuild 可以在运行目标之前确定各个批是否是最新的。如果不使用目标批处理,在每次执行目标时,任务都会运行这两个项批。
<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <Res Include="Strings.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Strings.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.jp.resources">
            <Culture>jp</Culture>
        </Res>
    </ItemGroup>
    <Target Name="Build"
        Inputs="@(Res)"
        Outputs="%(Culture)\MyApp.resources.dll">
        
        <AL Resources="@(Res)"
            TargetType="library"
            OutputAssembly="%(Culture)\MyApp.resources.dll"
    </Target>
</Project>