任务 MSBuild 如何遍历文件


<Target Name="Build">
...
    <MSBuild
            Projects="$(MSBuildProjectFile)"
            Condition="'@(FilesToCompile)' != ''"
            Targets="buildcpp"
            Properties="CPPFILE=%(FilesToCompile.FullPath);OBJFILE=$(ObjectFolder)%(FilesToCompile.Filename).doj;IncludeDirs=$(IncludeDirs)"
        />

FilesToCompile是所有.cpp文件的ItemGroup

当我查看构建日志时,它显示了CPPFILE中每个文件正在运行的目标buildcpp

我知道这是我在逻辑上想要发生的事情,但我的问题是,元素<MSBuild>MSBuild模式的什么规则导致为每个值执行任务MSBuild CPPFILE

简而言之,文档中的哪个地方说明将要发生的事情?

我想传入整个ItemGroup一次,而不是为每个项目调用一次MSBuild目标。

它所基于的 msbuild 概念称为"批处理" - 在你的例子中是任务批处理(请参阅 MSBuild 的任务批处理文档)。

任何包含对物料组的%()引用的任务都将拆分为共享相同元数据的批次,并且每个批次将执行一次任务。当使用内置元数据(如 IdentityFullPath )时,这本质上意味着"为永远的项目执行此任务",尽管也可能有更复杂的用例。

最新更新