我正在尝试使用CruiseControl.NET和MSBUILD改进构建时间,并且其中一个命令行开关maxcpucount可用于允许构建并行发生。我们的解决方案有60多个项目,因此任何改进都会有所帮助但是,每当我将maxcpucount提高到1以上时,由于以下原因,我们经常出现构建失败:
“进程无法访问文件xxxx,因为它正被使用 另一个过程。的msbuild“
似乎额外的并行构建线程/进程互相锁定。
答案 0 :(得分:3)
我想我找到了解决方案。看来如果我添加/ nodeReuse:false开关我没有得到文件锁。似乎nodeReuse功能正在保持msbuild进程,并且这些进程挂起到后续构建的文件锁。
答案 1 :(得分:2)
您是从解决方案文件构建的吗?如果是这样,请确保您使用的是项目到项目的直接引用,而不是使用Solution的项目依赖项功能。如果您碰巧使用了两者,可能会出现问题。请参阅this article。
更好的是,如果可能的话,抛弃解决方案文件并创建自己的MSBuild文件来推动构建。
答案 2 :(得分:0)
您的程序集可能正被另一个正在构建的程序集使用。确保每个组件在其他组件需要之前构建