我有一个 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 个。
这与我并不完全平行。有没有其他人看到过这种行为。我是不是误会了什么?