【问题标题】:MSBuild isnt making the build completely parallelMSBuild 没有使构建完全并行
【发布时间】:2013-04-07 01:00:24
【问题描述】:

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

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

【问题讨论】:

    标签: msbuild


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,这些项目都是 ToolsVersion 3.5。感谢您的参考
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2012-09-26
      • 2011-09-22
      • 1970-01-01
      相关资源
      最近更新 更多