如何使用命令行清除 NuGet 包缓存?

How can I clear the NuGet package cache using the command line?

我可以使用 Visual Studio 菜单 工具选项NuGet 包管理器清除我的开发计算机的 NuGet 包缓存常规清除包缓存 按钮。

我想在命令行上执行此操作。不幸的是,我找不到 nuget.exe.

的相关命令行开关

我是不是漏掉了什么?

nuget.exe 实用程序没有此功能,但看到 NuGet 缓存只是您计算机上的一个文件夹,您可以手动删除文件。只需将其添加到您的批处理文件中:

del %LOCALAPPDATA%\NuGet\Cache\*.nupkg /q

首先,从here下载NuGet命令行工具。

接下来,打开命令提示符并 cd 到下载 nuget.exe 的目录。

您可以使用此命令列出本地缓存:

nuget locals all -list

您可以使用此命令清除所有缓存:

nuget locals all -clear

参考:https://docs.nuget.org/consume/command-line-reference

这增加了

下载并安装 NuGet 命令行工具。

列出我们所有的当地人:

$ 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.

你也可以使用PowerShell(和我一样)。

例如:

rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg

或'quiet'模式(无错误信息):

rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg 2> $null

如果您需要为您的构建清除 NuGet 缓存 server/agent 您可以在此处找到 NuGet 包的缓存:

%windir%/ServiceProfiles/[account under build service runs]\AppData\Local\NuGet\Cache

示例:

C:\Windows\ServiceProfiles\NetworkService\AppData\Local\NuGet\Cache

请注意 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

对我来说,我必须进入这里:

%userprofile%\.nuget\packages

在 Visual Studio 2017 中,转到菜单 工具NuGet 包管理器包管理器设置。您可能会发现一个按钮,清除所有 NuGet 缓存:

如果您使用的是 .NET Core,您可以使用此命令清除缓存,从 .NET Core 工具 1.0 开始应该可以使用:

dotnet nuget locals all --clear

dotnet nuget locals all --clear

如果您使用的是 .NET Core。

我之所以来到这里是因为我试图弄清楚如何从缓存中删除特定 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>

对于使用 sudo yum install nuget 在 RHEL7(例如,从 EPEL 存储库)上安装 nuget 的用户,这里是本地缓存所在的位置:

~/.local/share/NuGet/Cache

我在这个文件夹中看到了我的 nugets(在构建服务器上):c:\Windows\System32\config\systemprofile.nuget\packages\