msbuild - 任务MSBuild如何循环文件

时间:2017-10-05 16:28:56

标签: visual-studio visual-studio-2013 msbuild

<Target Name="Build">
...

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

FilesToCompile是所有ItemGroup个文件的.cpp

当我查看构建日志时,它会显示buildcpp中每个文件的目标CPPFILE

我理解这是我逻辑上想要发生的事情,但我的问题是,元素<MSBuild>MSBuild架构的规则会导致任务MSBuild是为CPPFILE的每个值执行?

简而言之,文档中的哪个位置表明将会发生什么?

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

1 个答案:

答案 0 :(得分:1)

这是基于的msbuild概念称为“批处理” - 在您的案例中任务批处理(参见MSBuild's task batching documentation)。

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