可以MSBuild ItemGroup';我们可以分块吃吗?

可以MSBuild ItemGroup';我们可以分块吃吗?,msbuild,Msbuild,我有一个项目组,其中包含项目中的源文件: <ItemGroup> <SourceFiles Include=".\**\*.h;.\**\*.cpp"/> </ItemGroup> 有几百个源文件。我想将它们传递给Exec任务中的命令行工具 如果我为每个文件分别调用命令行工具: <Exec Command="tool.exe %(SourceFiles.FullPath)" WorkingDirectory="."/>

我有一个项目组,其中包含项目中的源文件:

  <ItemGroup>
    <SourceFiles Include=".\**\*.h;.\**\*.cpp"/>
  </ItemGroup>

有几百个源文件。我想将它们传递给Exec任务中的命令行工具

如果我为每个文件分别调用命令行工具:

  <Exec Command="tool.exe %(SourceFiles.FullPath)" WorkingDirectory="."/>

然后,它运行得非常慢

如果调用命令行工具并一次性传递所有文件:

  <Exec Command="tool.exe @(SourceFiles -> '&quot;%(FullPath)&quot;', ' ')" WorkingDirectory="."/>

然后,如果文件太多,我会得到一个错误(我猜命令行长度超过了某个最大值)


是否有一种方法可以将项目分块,以便可以多次调用该工具,每次都将最多数量的源文件名传递给该工具?

我不知道有任何机制可以使用已知的项目元数据来实现这一点。您可以将所有这些路径加载到它们自己的项目组中,并编写一个调用exec任务的自定义任务。编写自定义任务非常简单,可以内联完成: