NuGet 更新库新版本的缓存问题

时间:2022-07-26
本文章向大家介绍NuGet 更新库新版本的缓存问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

我有一个 NuGet 库有新的版本,但是我的服务器速度不够快,此时我第一次使用 NuGet 还原找不到库。在我服务器索引完成之后,再次使用 NuGet 会依然找不到这个库,而此时服务器准备完成。这是 NuGet 的缓存的坑

我使用了 BaGet 搭建我私有的 NuGet 服务器,他的速度很快,但是索引一个上传的 NuGet 库依然需要一定的时间。如果在 NuGet 服务器还没准备完成之前调用了 NuGet 的 restore 命令,此时预期是找不到 NuGet 的这个新版本的库

但是在 NuGet 服务器准备完成之后,再次调用 NuGet 的还原命令,包括 dotnet restore 都会提示找不到这个版本的库,需要等待超长的时间才能拉

一开始我以为是自己的 NuGet 服务器性能太差,后续在 WPF 官方开源仓库里面学到了这是 NuGet 的坑,在 WPF 的 Merge WPF 5.0 GA (release/5.0) into WPF master by ryalanms · Pull Request #3605 · dotnet/wpf 可以看到如下代码

Avoid using the http cache as workaround for https://github.com/NuGet/Home/issues/3116

在 NuGet 的官方开源仓库有小伙伴提出 NuGet should refresh its HTTP cache if it can’t find the package requested · Issue #3116 · NuGet/Home

也就是 NuGet 没有刷新自己缓存认为不存在某个库,解决方法是加上 No Cache 命令,如下面代码

NuGet restore -NoCache

dotnet restore --no-cache

这是因为在 http-cache 文件夹里面没有刷新,关于这个文件夹请看 How to manage the global packages, cache, temp folders in NuGet

路径如下

  • Windows: %localappdata%NuGetv3-cache
  • Mac/Linux: ~/.local/share/NuGet/v3-cache

可以使用下面代码清理

nuget locals http-cache -clear

dotnet nuget locals http-cache --clear

使用 No Cache 需要重新下载 NuGet 库,此时的速度比较慢,而使用清理 http-cache 只是刷新版本号的字符串,速度会更快。