ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我错过了什么?

我的 2015 VS 版本中缺少此选项
是的,它不见了。所以我正在使用公认的答案。

w
wonea

首先,从 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`
也许您应该在与构建操作相同的用户下运行 clear 操作。通过配置专用构建用户,或使用技巧在本地系统下运行清除。
是否有可能从缓存中删除特定的 NuGet?例如:我想从缓存中删除 NuGet X 并且不知道 NuGet 缓存位置,在这种情况下如何从缓存中单独删除“X”
我必须运行 nuget update -self 来更新我从该链接下载的 nuget.exe,否则我会收到错误 Unknown commmand: 'locals'
确保关闭 VS,因为 devenv.exe 可能会阻止某些包文件夹并且它们不会被清除。
P
Peter Mortensen

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

https://i.stack.imgur.com/Lg2Mo.jpg

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

dotnet nuget locals all --clear

所以它回来了! :-)。我很好奇它是否会在 VS 2019 中再次被删除:-)
现在在未来,这个按钮不会在 VS 2019 @g.pickardou 中删除。
dotnet nugget locals all -c 不删除 %LOCALAPPDATA%\NuGet\Cache\ 文件夹。
P
Peter Mortensen

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

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

在提出问题时,这是唯一的解决方案,最佳答案也是如此。现在我没有标记它,并在尝试后记下了@rmoore 的答案。
我需要为不同的用户(构建标识)清除缓存,这是清除缓存的唯一机制。命令行工具只会为我自己的身份清除缓存。
J
Jim Aho

dotnet nuget locals all --clear

如果您使用的是 .NET Core。


我建议在你去吃午饭之前这样做。
清除很快,只是下一个构建需要一点时间。
B
Bowofola

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

%userprofile%\.nuget\packages

这是下载并保存所有 nuget 的正确路径
而且,我有 2.04 Gb nuget 包:o
2.04GB 与“hello world”节点应用程序的 node_modules 大致相同;)
P
Peter Mortensen

这增加了 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 包的问题。我们通过始终在构建开始时清除缓存来解决它。
P
Peter Mortensen

请注意,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 包我也有一些问题
运行 dotnet restore --no-cache 对我有用,但我必须从以管理员身份运行的 Powershell 提示符执行此操作
P
Peter Mortensen

如果您需要清除构建服务器/代理的 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 资源管理器时,它会自动将您置于正确的目录中。
P
Peter Mortensen

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

例如:

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

或“安静”模式(没有错误消息):

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

G
George M

我最终来到这里是因为我试图弄清楚如何从缓存中删除 特定 nuget 包。上面的答案谈论使用 nuget locals all -clear 删除所有本地包。

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

您目前无法使用 nuget 或 dotnet cli 清除特定包。有一个 github 问题可以解决这个问题:https://github.com/NuGet/Home/issues/5713

现在,您必须求助于文件系统命令(如上面提到的一些答案)来删除特定的包。对于 mac/linux,它是 rm -rf ~/.nuget/packages/

我真正需要的是一种方法来删除我将要重新发布到本地 nuget 存储库的特定包的缓存(使用固定版本号使本地开发更容易)。我通过将以下内容添加到 nuget-packaged 库的 .csproj 文件来完成此操作:

    <Project>
      <Target Name="DeleteLocalCache" BeforeTargets="Pack">
        <RemoveDir Directories="$(NugetPackageRoot)/$(PackageId.ToLower())/1.0.0-local"/>
      </Target>
    </Project>

d
dokaspar

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

~/.local/share/NuGet/Cache

A
Andrey Ravkov

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