并行生成多个项目
MSBuild 3.5 提供以下两种用来在多核心或多处理器系统上优化生成性能的方法:
在命令行中使用 /maxcpucount 开关。
在 MSBuild 任务中使用 BuildInParallel 任务参数。
/Maxcpucount 开关
通过 /maxcpucount 开关(缩写形式为 /m),MSBuild 3.5 可创建可以并行运行的指定数目的 MSBuild.exe 进程。这些进程也称为“辅助进程”。当其他可用处理器正在生成其他项目时,每个辅助进程可使用一个单独的核心或处理器(如果可用)来生成项目。 例如,将 /maxcpucount 设置为值“4”将使 MSBuild 创建四个辅助进程来生成项目。
下面是在命令行中使用 /maxcpucount 开关的一个示例。
C:\WINDOWS\Microsoft.NET\Framework\v3.5>msbuild.exe myproj.proj /maxcpucount:3
此示例指示 MSBuild 使用三个辅助进程来生成。 通过使用此配置,可以同时生成三个项目。 为了确保获得最佳生成性能,请将 /maxcpucount 的值设置为等于系统中的处理器数或内核数。
BuildInParallel 任务参数
BuildInParallel 是 MSBuild 任务中的可选布尔型参数。 当 BuildInParallel 设置为 true(默认值)时,将生成多个辅助进程,以便同时生成尽可能多的项目。 为了使此操作正确执行,必须将 /maxcpucount 开关设置为大于 1 的值,系统必须至少为双核系统或具有两个或更多个处理器。
下面是摘自 microsoft.common.targets 的有关如何设置 BuildInParallel 参数的示例。
<PropertyGroup>
<BuildInParallel Condition="'$(BuildInParallel)' ==
''">true</BuildInParallel>
</PropertyGroup>
<MSBuild
Projects="@(_MSBuildProjectReferenceExistent)"
Targets="GetTargetPath"
BuildInParallel="$(BuildInParallel)"
Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);
%(_MSBuildProjectReferenceExistent.SetPlatform)"
Condition="'@(NonVCProjectReference)'!='' and
('$(BuildingSolutionFile)' == 'true' or
'$(BuildingInsideVisualStudio)' == 'true' or
'$(BuildProjectReferences)' != 'true') and
'@(_MSBuildProjectReferenceExistent)' != ''"
ContinueOnError="!$(BuildingProject)">
<Output TaskParameter="TargetOutputs"
ItemName="_ResolvedProjectReferencePaths"/>
</MSBuild>