如何使用命令行清除 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.0Batmaci 1.1Batmaci 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 包我也会遇到一些问题 Running dotnet 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删除所有本地包。

如果有人有兴趣清除特定包裹,我将分享我的发现:

您目前无法使用nugetdotnet 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 包缓存?的主要内容,如果未能解决你的问题,请参考以下文章

使用命令行清除 Android 设备的 DNS 缓存

手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行

Powershell:如何在未连接的计算机上安装适用于 PowerShell 的 Nuget 提供程序,以便可以从 PS 命令行安装 nuget 包?

如何发布nuget预发行版本包

如何下载没有 nuget.exe 或 Visual Studio 扩展的 Nuget 包?

如何在没有nuget.exe或Visual Studio扩展的情况下下载Nuget包?