如何:使用项元数据对目标进行批处理

更新:2007 年 11 月

MSBuild 能够对生成目标的输入和输出执行依赖项分析。如果确定了目标的输入和输出都是最新的,将跳过该目标并继续生成过程。Target 元素使用 InputsOutputs 属性来指定在依赖项分析过程中要检查的项。

如果目标包含使用批处理的项作为输入或输出的任务,该目标的 Target 元素应当在其 InputsOutputs 属性中使用批处理,以便 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>

请参见

任务

如何:增量生成

如何:使用项元数据对任务进行批处理

概念

MSBuild 批处理

参考

Target 元素 (MSBuild)