TeamCity中的NuGet错误:进程无法访问该文件,因为它正由另一个进程使用

时间:2014-12-30 08:03:38

标签: nuget teamcity

我们使用TeamCity(9.0)作为我们的CI服务器来构建,测试和部署多个应用程序。最近我们看到偶然(每30/40版本中有一个版本)NuGet(2.8.3)错误如下:

  

[restore]进程无法访问文件' C:\ BuildAgent \ work \ e32cbd0940f38bf ..... \ packages \ Newtonsoft.Json.5.0.6 \ Newtonsoft.Json.5.0.6.nupkg&# 39;因为它正被另一个进程使用。

实际包装似乎不时有所不同。

我们怀疑它与同一解决方案中多个项目中引用的同一个包有关,但我希望NuGet能够通过过滤掉重复项而不是尝试多次检索同一个包来正确处理这个问题。 ,因此在将包恢复到工作文件夹时最终会出现写锁。

作为每个构建配置的第一步,我们有一个NuGet安装程序'步骤设置为'恢复'。我试图摆弄它的设置(不同的'更新模式'' -NoCache'旧的NuGet版本(2.8.0)),但无济于事。

是否还有其他人遇到类似问题,如果有,请就如何确保不会发生此错误提出任何建议。

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:9)

我和Jenkins有同样的问题并通过添加" -DisableParallelProcessing"来解决这个问题。对于nuget restore命令,最终命令如下:

nuget restore "%WORKSPACE%\Solutions\App\App.sln" -DisableParallelProcessing

答案 1 :(得分:3)

从我们的反恶意软件产品中排除NuGet包文件为我们解决了这个问题。

我在构建代理上使用了SysInternals Process Explorer实用程序,在构建运行时搜索任何* .nupkg文件的文件句柄。在几次构建之后,我观察到反恶意软件产品在NuGet恢复操作期间暂时锁定了这些文件。在反恶意软件扫描规则中添加排除项会阻止这些锁定,因为文件不再被扫描。

在我们的环境中,我们在不同的构建代理服务器上使用两种不同的反恶意软件产品。我们遇到了这两个产品的问题。

答案 2 :(得分:0)

就错误信息而言,我也遇到过它。

我调试了“nuget restore”进程,在.nupkg被复制到本地存储库时断开,然后在打开文件进行写入时冻结线程。当然,我在另一个任务中得到了异常,因为这两个包有Ids,其中一个是另一个的前缀。我为此提出了一个问题:https://nuget.codeplex.com/workitem/4465

然而,这可能不是完全你的问题,因为我的情况中的错误是读取包含“long”名称的包的.nupkg,我认为没有一个ID为NewtonSoft.Json前缀的包(反之亦然:例如NewtonSoft.Json.Glimpse的NewtonSoft.JsonResult)。

答案 3 :(得分:0)

我安装了新的Newtonsoft.Json,问题消失了

答案 4 :(得分:-2)

您可以使用“锁定进程”选项打开构建功能Swabra(需要handle.exe)。检查是否有任何文件在构建完成后被锁定。 如果没有锁定的文件,则尝试使用命令行构建步骤而不是NuGet Installer运行Nuget。如果问题再现,则很可能意味着问题与NuGet有关。

相关问题