如何使用命令行清除 NuGet 包缓存?
Posted
技术标签:
【中文标题】如何使用命令行清除 NuGet 包缓存?【英文标题】:How can I clear the NuGet package cache using the command line? 【发布时间】:2015-09-05 03:35:21 【问题描述】:我可以使用 Visual Studio 菜单工具 → 选项 → NuGet 包管理器 → 常规清除我的开发计算机的 NuGet 包缓存/em>:清除包缓存按钮。
我想在命令行上执行此操作。不幸的是,我找不到 nuget.exe 的相关命令行开关。
我错过了什么吗?
【问题讨论】:
我的 2015 VS 版本中缺少此选项 是的,它不见了。所以我使用的是公认的答案。 微软文档:docs.microsoft.com/en-us/nuget/consume-packages/… 【参考方案1】:首先,从here下载NuGet命令行工具。
接下来,打开命令提示符并将cd
转到下载nuget.exe
的目录。
您可以使用以下命令列出本地缓存:
nuget locals all -list
您可以使用此命令清除所有缓存:
nuget locals all -clear
参考:https://docs.nuget.org/consume/command-line-reference
【讨论】:
适用于 3.3,但仅适用于当前用户 - 我的构建服务器上存在损坏的本地缓存问题,该服务器(可悲)在本地系统下运行,因此未列出缓存 -实际位置是 `C:\Windows\SysWOW64\config\systemprofile\AppData\Local\NuGet\Cache` 也许您应该在与构建操作相同的用户下运行清除操作。要么配置专用的构建用户,要么使用技巧在本地系统下运行清除。 是否有可能从缓存中删除特定的 NuGet?例如:我想从缓存中删除 NuGet X,但不知道 NuGet 缓存位置,在这种情况下如何从缓存中单独删除“X” 我必须运行nuget update -self
来更新我从这个链接下载的 nuget.exe 否则我会收到错误 Unknown commmand: 'locals'
确保关闭 VS,因为 devenv.exe
可能会阻止某些包文件夹并且不会被清除。【参考方案2】:
在 Visual Studio 2017 中,转到菜单 工具 → NuGet 包管理器 → 包管理器设置。您可能会发现一个按钮,Clear All NuGet Cache(s):
如果您使用的是 .NET Core,您可以使用此命令清除缓存,从 .NET Core 工具 1.0 开始应该可以使用:
dotnet nuget locals all --clear
【讨论】:
所以它回来了! :-)。我很好奇它是否会在 VS 2019 中再次被删除:-) 命令行使用dotnet nuget locals all --clear
很有用,谢谢
命令dotnet nuget locals all --clear
运行良好。我不必安装任何额外的 nuget cmd 工具。我的 SSD 又能呼吸了!
现在在 VS 2019 @g.pickardou 中不会删除此按钮。
dotnet nugget locals all -c
不会删除 %LOCALAPPDATA%\NuGet\Cache\ 文件夹。【参考方案3】:
nuget.exe 实用程序没有此功能,但看到 NuGet 缓存只是您计算机上的一个文件夹,您可以手动删除文件。只需将其添加到您的批处理文件中:
del %LOCALAPPDATA%\NuGet\Cache\*.nupkg /q
【讨论】:
在询问时这是唯一的解决方案,因此也是最佳答案。现在我已取消标记,并在尝试后记下了@rmoore 的答案。 我需要为不同的用户(构建标识)清除缓存,这是清除缓存的唯一机制。命令行工具只会为我自己的身份清除缓存。【参考方案4】:对我来说,我必须进去:
%userprofile%\.nuget\packages
【讨论】:
这是下载并保存所有 nuget 的正确路径 而且,我有 2.04 Gb nuget 包:o 2.04GB 与“hello world”节点应用程序的 node_modules 大致相同;)【参考方案5】:dotnet nuget locals all --clear
如果您使用的是 .NET Core。
【讨论】:
我建议在你去吃午饭之前这样做。 清除很快,只是下一个构建需要一点时间。【参考方案6】:这增加了rm8x's answer。
下载并安装 NuGet 命令行工具。
来自 Chocolatey → https://chocolatey.org/packages/NuGet.CommandLine 来自 NuGet.org → https://www.nuget.org/列出我们所有的本地人:
$ nuget locals all -list
http-cache: C:\Users\MyUser\AppData\Local\NuGet\v3-cache
packages-cache: C:\Users\MyUser\AppData\Local\NuGet\Cache
global-packages: C:\Users\MyUser\.nuget\packages\
我们现在可以手动删除这些,或者按照 rm8x 的建议,使用 nuget locals all -clear
。
【讨论】:
如果 nuget 每次构建都会生成所有这些,那么删除的意义何在?为什么 nuget 确实创建了这么多文件夹? @batmaci 因为随着时间的推移包会更新,你最终会得到Batmaci 1.0
、Batmaci 1.1
、Batmaci 1.2
,你需要的只是最新的
我们在构建服务器上偶尔会遇到在缓存中找不到 NuGet 包的问题。我们通过始终在构建开始时清除缓存来解决它。【参考方案7】:
请注意,dnx
有不同的缓存来提供 HTTP 结果:
Microsoft .NET Development Utility Clr-x86-1.0.0-rc1-16231
CACHE https://www.nuget.org/api/v2/
CACHE http://192.168.148.21/api/odata/
你可以用它来清除
dnu clear-http-cache
现在我们只需要找出新的dotnet
CLI 工具上的命令。
...这里是:
dotnet restore --no-cache
【讨论】:
我会使用 Ruslan 的上述方法,因为即使通过 --no-cache 包我也会遇到一些问题 Runningdotnet restore --no-cache
为我工作,但我必须在以管理员身份运行的 Powershell 提示符下进行操作【参考方案8】:
如果您需要清除构建服务器/代理的 NuGet 缓存,您可以在此处找到 NuGet 包的缓存:
%windir%/ServiceProfiles/[account under build service runs]\AppData\Local\NuGet\Cache
例子:
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\NuGet\Cache
【讨论】:
我冒昧地标记了路径以使其更具可读性,并将 [windows dir] 替换为%windir%
,这样在输入时会自动将您放在正确的目录中,例如Windows 资源管理器。【参考方案9】:
你也可以使用 PowerShell(和我一样)。
例如:
rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg
或“安静”模式(无错误消息):
rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg 2> $null
【讨论】:
【参考方案10】:我最终来到这里是因为我试图弄清楚如何从缓存中删除 特定 nuget 包。上面的答案是关于使用nuget locals all -clear
删除所有本地包。
如果有人有兴趣清除特定包裹,我将分享我的发现:
您目前无法使用nuget
或dotnet
cli 清除特定包。有一个 github 问题可以解决这个问题:https://github.com/NuGet/Home/issues/5713
现在,您必须求助于文件系统命令(如上面提到的一些答案)来删除特定的包。对于 mac/linux,它是 rm -rf ~/.nuget/packages/<package-name>
我真正需要的是一种方法来删除我将要重新发布到本地 nuget 存储库的特定包的缓存(使用固定版本号使本地开发更容易)。我通过将以下内容添加到 nuget 打包库的 .csproj
文件中来完成此操作:
<Project>
<Target Name="DeleteLocalCache" BeforeTargets="Pack">
<RemoveDir Directories="$(NugetPackageRoot)/$(PackageId.ToLower())/1.0.0-local"/>
</Target>
</Project>
【讨论】:
【参考方案11】:对于那些使用 sudo yum install nuget
在 RHEL7 上(例如,从 EPEL 存储库)安装 nuget
的用户,这里是本地缓存所在的位置:
~/.local/share/NuGet/Cache
【讨论】:
【参考方案12】:我在这个文件夹中看到了我的 nugets(在构建服务器上):c:\Windows\System32\config\systemprofile.nuget\packages\
【讨论】:
以上是关于如何使用命令行清除 NuGet 包缓存?的主要内容,如果未能解决你的问题,请参考以下文章
手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行
Powershell:如何在未连接的计算机上安装适用于 PowerShell 的 Nuget 提供程序,以便可以从 PS 命令行安装 nuget 包?