MSBuild不会使构建完全并行

时间:2008-10-31 20:29:25

标签: msbuild

我有一个MSBuild项目,其中有一个任务调用多个项目,我设置BuildInParallel =“true”

示例:

  <Message Text="MSBuild project list = @(ProjList)" />
  <!-- Compile in parallel -->
  <MSBuild Projects="@(ProjList)" 
           Targets="Build" 
           Properties="Configuration=$(Configuration)" 
           BuildInParallel="true" /> 

这些子项目实际上调用命令行工具来执行实际的“构建” - 称之为compile.exe。对构建过程进行粗略分析(感谢taskmgr.exe)具有以下结果:

基于/ m设置 - 我看到确实启动了MSBuild.exe进程的确切数量 - 当然是可用的并发构建进程总数。

然而,我期望看到的是compile.exe的许多进程。基本上每个MSBuild进程都会转向并调用compile.exe。我看到的是启动了一些compile.exe,然后它们慢慢完成,直到我看到一个唯一的compile.exe仍然存在。每个compile.exe占用不同时间的任务,因此预计其中一个比其他任务需要更长的时间。

但是,在完成第一批“批处理”之前,不会生成其他compile.exe。换句话说,如果我有/ m:4 - 我将看到4个compile.exe直到所有完成,然后另外4个将被生成。

这与我并不完全平行。有没有其他人看到过这种行为。我只是误解了什么?

2 个答案:

答案 0 :(得分:1)

查看较新的帖子。看看Hashimi MSPress的书 - 强烈推荐。

如果您正在使用TeamBuild,则需要在构建服务配置文件中调整MaxProcesses。 [但你会说。]

如果您自己运行msbuild,则需要使用/ m调用msbuild以使任何事情发生。

@(ProjList)中的文件是否都包含ToolsVersion = 3.5?

答案 1 :(得分:1)

您是否尝试过使用msbuild /ds选项?它生成一个详细的摘要,可用于调试并行构建中的瓶颈。在MSDN网站上有一个非常好的博客文章。