1

我有一个 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 个。

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

4

2 回答 2

1

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

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

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

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

于 2009-07-14T14:49:08.717 回答
1

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

于 2013-04-06T17:00:24.970 回答