TeamCity中的NuGet错误:进程无法访问该文件,因为其他进程正在使用该文件

TeamCity中的NuGet错误:进程无法访问该文件,因为其他进程正在使用该文件,nuget,teamcity,Nuget,Teamcity,我们使用TeamCity(9.0)作为CI服务器来构建、测试和部署多个应用程序。最近,我们看到NuGet(2.8.3)偶尔出现如下错误(大约每30/40个版本中就有一个): [还原]进程无法访问文件“C:\BuildAgent\work\e32cbd0940f38bf…..\packages\Newtonsoft.Json.5.0.6\Newtonsoft.Json.5.0.6.nupkg”,因为另一进程正在使用该文件 实际的包装似乎不时有所不同 我们怀疑这与同一解决方案中的多个项目中引用的同一

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

[还原]进程无法访问文件“C:\BuildAgent\work\e32cbd0940f38bf…..\packages\Newtonsoft.Json.5.0.6\Newtonsoft.Json.5.0.6.nupkg”,因为另一进程正在使用该文件

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

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

作为每个构建配置的第一步,我们将“NuGet Installer”步骤设置为“restore”。我尝试过摆弄它的设置(不同的“更新模式”,“NoCache”,较旧的NuGet版本(2.8.0)),但都没有用

是否有其他人遇到过类似问题,如果是,对如何确保不会发生此错误有任何建议


任何帮助都将不胜感激

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

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

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


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

就错误消息而言,我也遇到了此问题

我调试了“nuget restore”进程,在将.nupkg复制到本地存储库时中断,然后在打开文件进行写入时冻结线程。果然,我在另一个任务中遇到了异常,因为这两个包都有ID,其中一个是另一个的前缀。我为此提交了一个问题:


但是,这可能不完全是您的问题,因为在我的例子中,错误是读取带有“long”名称的包的.nupkg,并且我认为没有一个包的Id前缀是NewtonSoft.Json(但很有可能是另一种情况:例如NewtonSoft.Json.scape的NewtonSoft.JsonResult)。

我与Jenkins有相同的问题,并修复了通过在nuget restore命令中添加“-DisableParallelProcessing”,最终的命令如下所示:

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

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

我想我在TeamCity中也遇到了类似的错误。有人知道在那里设置此标志的方法吗?在尝试下面的所有操作后,使用--禁用并行标志,这对您来说解决了吗?抱歉,回复有点晚。不幸的是,下面的建议似乎对我们都不起作用。我不确定最终是什么解决了这个问题,但它似乎在某个时候停止了。如果有什么我猜一个新版本的NuGet可能解决了这个问题,但我还不能完全确认。你的补丁被接受了吗?自从codeplex被取下后,链接就不再工作了。所以我看不到你改变了什么,或者我7年后,这段代码仍然存在于Nuget源代码中:这是一个很好的答案,为我节省了很多时间。我对它进行了升级和编辑,以明确为什么你的答案如此易懂。