我有一个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个将被生成。
这与我并不完全平行。有没有其他人看到过这种行为。我只是误解了什么?
答案 0 :(得分:1)
查看较新的帖子。看看Hashimi MSPress的书 - 强烈推荐。
如果您正在使用TeamBuild,则需要在构建服务配置文件中调整MaxProcesses。 [但你会说。]
如果您自己运行msbuild,则需要使用/ m调用msbuild以使任何事情发生。
@(ProjList)中的文件是否都包含ToolsVersion = 3.5?
答案 1 :(得分:1)
您是否尝试过使用msbuild /ds
选项?它生成一个详细的摘要,可用于调试并行构建中的瓶颈。在MSDN网站上有一个非常好的博客文章。