有时会出现此错误,通常此步骤正常,但在大约10%的情况下,它会失败并显示以下消息。
Nuget安装程序步骤是第一个构建步骤,并且在TeamCity中也启用了“clean checkout”,因此不应该有任何使用文件的进程。
[restore]进程无法访问文件'C:\ BuildAgent \ work ... \ packages \ Microsoft.Bcl.Build.1.0.21 \ Microsoft.Bcl.Build.1.0.21.nupkg',因为它是被另一个进程使用。
[restore]进程退出代码1
答案 0 :(得分:6)
" 我的文件的根本原因正由另一个进程使用"
您可以做几件事,具体取决于根本原因:
您使用MSBuild的并行构建功能:根据他的blog,它似乎与NuGet包还原不兼容,因为它可以为每个包运行并行包恢复项目(如果有几个项目需要Microsoft.Bcl.Build ...... Boom!)。禁用并行构建或在解决方案之外执行包还原(在命令行步骤中)。顺便说一句,它不是good practice to do NuGet restore with solution MSBuild。
还有另一个过程:
使用进程监视器/资源管理器查找
哪个进程持有锁定文件。它可以是一个防病毒,文件索引工具,一个在后台运行的附加构建代理实例。由于锁定不是永久性的,并且对于这类问题,十分之一是非常多的,我不会打赌这是根本原因。
没有其他流程:
这是Teamcity NuGet安装程序中的一个错误。然后,您可以通过调用nuget restore
的命令行步骤替换该步骤,并检查它是否可以解决您的问题。
使用您喜欢的nuget插件诊断自己:
NuGet插件代码可用here。这意味着您可以编译自己的版本,并在发生这类问题时附加调试信息(例如,锁定文件的进程列表)。或者甚至更有用,您可以添加重试步骤,以防文件被锁定。
编辑:对于那些在Unix上使用Teamcity的人......
我尝试在Unix上安装Teamcity,并使用NuGet插件在mono上构建。顺便说一句,NuGet插件在Unix上根本不起作用(JetBrains不支持它)。我甚至试图修复它,但用命令行替换它更容易。
答案 1 :(得分:3)
每个构建代理都有单独的工作目录吗?否则两个paralel构建可以在同一时间执行。
答案 2 :(得分:2)
试试这个: