TeamCity NuGet安装程序步骤失败

Lev*_*Lev 10 .net c# teamcity nuget nuget-package-restore

有时会出现此错误,通常此步骤正常,但在大约10%的情况下,它会失败并显示以下消息.

Nuget安装程序步骤是第一个构建步骤,并且在TeamCity中也启用了"clean checkout",因此不应该有任何使用文件的进程.

[restore]进程无法访问文件'C:\ BuildAgent\work ...\packages\Microsoft.Bcl.Build.1.0.21\Microsoft.Bcl.Build.1.0.21.nupkg'因为它正在被使用另一个过程.

[恢复]进程退出代码1

Fab*_*Fab 6

的根本原因" 我的文件正在由另一个进程 "

您可以做几件事,具体取决于根本原因:

  • 你使用MSBuild的并行构建功能:根据他的博客,它看起来与NuGet包恢复效果不佳,因为它可以为每个项目运行并行包恢复(如果有几个项目需要Microsoft.Bcl.Build ...... Boom! ).禁用并行构建或在解决方案之外执行包还原(在命令行步骤中).顺便说一下,使用解决方案MSBuild进行NuGet还原不是一个好习惯.

  • 还有另一个过程:
    使用进程监视器/资源管理器找出锁定文件的进程.它可以是一个防病毒,文件索引工具,一个在后台运行的附加构建代理实例.由于锁不是永久性的,对于这类问题,十分之一是非常多的,我不敢打赌这是根本原因.

  • 没有其他过程:
    这是Teamcity NuGet安装程序中的一个错误.然后,您可以通过调用命令行步骤替换该步骤,nuget restore并检查它是否修复了您的问题.

  • 用你自己的nuget插件来诊断自己:
    NuGet插件代码可以在这里找到.这意味着您可以编译自己的版本,并在发生这类问题时附加调试信息(例如,锁定文件的进程列表).或者甚至更有用,您可以在文件被锁定时添加重试步骤.

编辑:对于那些在Unix上使用Teamcity的人......

我试图在Unix上安装Teamcity,并使用NuGet插件在mono上构建.顺便说一下,NuGet插件在Unix上根本不起作用(JetBrains不支持).我甚至尝试修复它,但用命令行替换它更容易.