阅读完https://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx后,我发现问题要么非常难懂,要么就是我太蠢了。
我一直通过命令行运行
另一方面,当我从目标文件中调用
请注意,这是
该文章指出,实际上存在一个同名的构建属性-
但是,我可能会错过些什么,所以我的问题是-如果在没有
(我认为我知道答案-绝对没有任何东西,但以防万一)
我一直通过命令行运行
msbuild.exe /m
,而没有使用/p:BuildInParallel=true
,这样它总是会生成预期数量的msbuild节点(我的桌面电脑上有12个,笔记本电脑上有4个),并在大多数情况下按照相应的并发度(每次12或4个)构建解决方案项目。另一方面,当我从目标文件中调用
MSBuild
任务,并传递多个项目(或一个解决方案文件)时,我总是设置了MSBuild
任务的BuildInParallel
属性。因为这就是使用MSBuild任务并行构建项目的方法,对吧?请注意,这是
MSBuild
任务的属性,不是通过MSBuild.Properties
传递的构建属性(例如Configuration
)。该文章指出,实际上存在一个同名的构建属性-
BuildInParallel
,它与/m
开关相辅相成,这对我来说是个完全的新闻。我在*c:\Program Files(x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild*下搜索了所有*.targets文件,唯一提到它的地方是在以下上下文中:
- 如果属性值为nil,请将其设置为
true
- 将其值传递给
MSBuild.BuildInParallel
属性。 - 构建Silverlight项目时硬编码传递
false
。(我们仍然有这些项目,我可以证实-它们总是按顺序构建:-()
BuildInParallel
传递给msbuild.exe
,因为除非我们传递false
,否则它没有任何意义。这也不需要,只需不传递/m
即可。但是,我可能会错过些什么,所以我的问题是-如果在没有
/p:BuildInParallel=true
的情况下运行msbuild.exe /m
,我会失去什么呢?(我认为我知道答案-绝对没有任何东西,但以防万一)