gpt4 book ai didi

MSBuild 和 TeamBuild - BuildInParallel 由于 MSB3021 文件权限冲突而失败

转载 作者:行者123 更新时间:2023-12-03 10:15:00 33 4
gpt4 key购买 nike

我维护了一个相当大的软件的构建,包括大约 350 个 csharp 项目。我们的调试构建时间约为 17 分钟。

我一直在寻找缩短构建时间的方法,并且 BuildInParallel 属性确实很吸引人。尤其是因为我们有一个四核服务器来做我们的构建,它应该真的能够利用计算能力。

但是,唉...在设置属性,修改构建代理的配置文件并重新启动它之后,第一次运行确实看起来很有希望,比正常情况快得多,直到它失败为止。

查看构建日志后,当尝试将标记为 CopyLocal=true 的引用复制到输出目录时,构建似乎失败了。
如果 C# 项目 A 和 C# 项目 B 并行构建,并且两者都引用相同的第三方 dll,并尝试同时复制它,则尝试复制文件的第二个进程将获得文件访问冲突 -该文件正被另一个进程使用。

任何人都经历过这种情况,并且能够在 Team Build 上进行多进程构建?

这是其中一个失败,有点难以弄清楚同时正在 build 的其他项目。

我已经删除了所有不相关的东西:

54>Target "_CopyFilesMarkedCopyLocal" in file "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets" from project "d:\temp\PCM\1.3-Maint_CI\Sources\Modules\Core\Test\UnitTest\TestDIPS.Core.Data.Server.NUnit\TestDIPS.Core.Data.Server.NUnit.csproj": 54>Task "Copy" Copying file from "..........\Bin\3rdParty\Oracle\Oracle.DataAccess.dll" to "d:\temp\PCM\1.3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll". Command: copy /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): error MSB3021: Unable to copy file "..........\Bin\3rdParty\Oracle\Oracle.DataAccess.dll" to "d:\temp\PCM\1.3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll". The process cannot access the file 'd:\temp\PCM\1.3-Maint_CI\Binaries\Debug\Oracle.DataAccess.dll' because it is being used by another process. Done executing task "Copy" -- FAILED. 54>Done building target "_CopyFilesMarkedCopyLocal" in project "TestDIPS.Core.Data.Server.NUnit.csproj" -- FAILED.

最佳答案

MSBuild 附带的默认目标是为 CopyLocal 行为而设计的——这是 VS 所依赖的。当您输出到单个输出目录时, CopyLocal 会出现问题。

为了能够真正并行构建,您需要在 Microsoft.*.Common.*.targets 文件中禁用多个 CopyLocal 特定行为。我过去曾与 MSBuild 团队的一些人交谈过,这是一件特别麻烦的事情。即使您清除了某些 CopyLocal 行为,VS 测试访问器在并行构建时也表现不佳。

您可以从以下几点开始:

  • 通过将 private 设置为 true 来禁用引用的 CopyLocal 行为。
  • 构建依赖项目时,为 CopyToOutputPath 文件禁用 CopyLocal。
  • 关于MSBuild 和 TeamBuild - BuildInParallel 由于 MSB3021 文件权限冲突而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/707742/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com