【发布时间】:2010-10-17 00:04:52
【问题描述】:
我维护了一个相当大的软件的构建,其中包含大约 350 个 csharp 项目。我们的调试构建时钟的构建时间大约为 17 分钟。
我一直在寻找缩短构建时间的方法,而 BuildInParallel 属性看起来确实很有趣。尤其是因为我们有一个四核服务器进行构建,它应该真的能够利用计算能力。
但是唉...在设置属性、修改构建代理的配置文件并重新启动它之后,第一次运行确实看起来很有希望,比正常速度快得多,直到它失败了。
查看构建日志后,当它尝试将标记为 CopyLocal=true 的引用复制到输出目录时,构建似乎失败了。 如果 C# 项目 A 和 C# 项目 B 是并行构建的,并且两者都引用相同的第三方 dll,并尝试同时复制它,则尝试复制文件的第二个进程将获得文件访问冲突 -该文件正被另一个进程使用。
任何人都经历过这种情况,并且能够在 Team Build 上进行多进程构建吗?
这是其中一个失败,很难弄清楚同时在构建哪个其他项目。
我已经删除了所有不相关的东西:
54>文件中的目标“_CopyFilesMarkedCopyLocal” “c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets” 从项目 “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>在项目中完成构建目标“_CopyFilesMarkedCopyLocal” "TestDIPS.Core.Data.Server.NUnit.csproj" -- 失败。
【问题讨论】: