我维护了一个相当大的软件的构建,包括大约 350 个 csharp 项目。我们调试内置时钟的构建时间大约为 17 分钟。
我一直在寻找缩短构建时间的方法,而 BuildInParallel 属性看起来确实很有趣。尤其是因为我们有一个四核服务器在做我们的构建,它应该真的能够利用计算能力。
但是唉......在设置属性,修改构建代理的配置文件并重新启动它之后,第一次运行看起来确实很有希望,比正常速度快得多,直到它失败了。
查看构建日志后,当它尝试将标记为 CopyLocal=true 的引用复制到输出目录时,构建似乎失败了。如果 C# 项目 A 和 C# 项目 B 是并行构建的,并且两者都引用相同的第三方 dll,并尝试同时复制它,则尝试复制文件的第二个进程将获得文件访问冲突 -该文件正被另一个进程使用。
任何人都经历过这种情况,并且能够在 Team Build 上进行多进程构建吗?
这是其中一个失败,很难弄清楚同时在建造哪个其他项目。
我已经删除了所有不相关的东西:
54>从项目“d:\temp\PCM\1.3-Maint_CI\Sources\Modules\Core\ Test\UnitTest\TestDIPS.Core.Data.Server.NUnit\TestDIPS.Core.Data.Server.NUnit.csproj”:54>任务“复制”从“..........\Bin\ 3rdParty\Oracle\Oracle.DataAccess.dll”到“d:\temp\PCM\1.3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll”。命令:复制 /y "..........\Bin\3rdParty\Oracle\Oracle.DataAccess.dll" "d:\temp\PCM\1.3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll " 54>c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(2703,9): 错误 MSB3021: 无法复制文件 ".......\Bin\ 3rdParty\Oracle\Oracle.DataAccess.dll" 到“d:\temp\PCM\1.3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll”。该进程无法访问文件“d:\temp\PCM\1.3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll”,因为它正被另一个进程使用。完成执行任务“复制”——失败。54>在项目“TestDIPS.Core.Data.Server.NUnit.csproj”中完成构建目标“_CopyFilesMarkedCopyLocal”——失败。