Team Foundation Server 构建失败。无法将 "xxx.dll" 复制到 "yyy.dll"

Team Foundation Server Build Failed. Could not copy "xxx.dll" to "yyy.dll"

我在构建服务器上尝试构建时遇到以下 2 个错误:

path\to.NETFramework\Microsoft.Common.targets (3390):无法将 "path\to\xxx.dll" 复制到 "path\to\yyy.dll"。超过重试次数 10。失败。

path\to.NETFramework\Microsoft.Common.targets (3390):无法将文件 "path\to\xxx.dll" 复制到 "path\to\yyy.dll"。 该进程无法访问文件 'path\to\yyy.dll',因为它正被另一个进程使用。

在本地,很容易修复 - 以管理员身份关闭 Visual Studio 和 运行 即可解决问题。但是,当使用构建服务器(Microsoft Server)时,我似乎无法解决问题。

  1. 已尝试重新启动构建代理。
  2. 确保我的项目是当时唯一的一栋建筑。
  3. 手动删除了dll。
  4. 运行 具有 /m:1 参数的代理。

谢谢。

编辑:我已经设法在本地重现错误。如果我更改配置管理器中的配置并清理->重建项目,它会给我同样的错误。不过之前说过,重启VS就解决了这个错误,就是不知道在服务器端怎么弄。

如果您正在使用 XAML 构建,您可以尝试通过在构建 server.For TFS2010 和 TFS2012 设置 MSBuild Multi-Proc 上禁用并行构建来解决此问题 Process 选项卡设置为 False,对于 TFS2013,TFS2015 在 MSBuild Arguments 中键入 /m:1。有关 MSBuild 中 /m 参数的更多信息,请参阅此文档:MSBuild Command-Line Reference

切换到单进程构建增加了构建时间,但这是可以接受的损失。您可以将其用作解决方法。

终于找到解决办法了。事实证明它与 TFS 本身无关。我无法在本地重现错误,因为出于某种原因,它在不应该编译的时候进行了编译。

我的问题是 "broken references"。 我正在使用一些 Biztalk 程序,其中 5 个依赖于其他项目(自定义 Biztalk 管道组件),但不是对项目的引用本身。我认为这可能是由打开组件工具箱引起的,尽管我不确定。

因此,我手动删除并再次添加了对所述项目的引用(添加-> 引用),现在一切正常。