120G固态C盘爆红!NuGet缓存清理+迁移路径
前言
我的日常开发机配置为 120G SSD 系统C盘 + 1T HDD 机械D盘,也是很多开发者的经典老旧机型搭配。120G固态硬盘容量本就十分有限,在安装Windows系统、Visual Studio及各类开发工具后,剩余空间寥寥无几。
长期使用下来,系统C盘频繁爆红、磁盘空间持续告警。使用Windows自带磁盘清理、各类第三方C盘瘦身工具全盘扫描后,仅能释放数百MB垃圾文件,无法从根源解决空间不足问题。
经过排查定位到核心元凶:C盘默认生成的 .nuget 缓存目录,仅全局NuGet包缓存就占用6G+空间,叠加HTTP缓存、临时运行缓存、插件缓存后,持续蚕食宝贵的固态存储空间。
单纯手动删除缓存仅能临时释放空间,后续打开、还原.NET项目时,NuGet会自动重新下载缓存文件,C盘很快会再次爆满。
本文分享一套完整根治方案:一键清理冗余NuGet缓存快速救急,通过环境变量全局迁移全部NuGet缓存到机械硬盘。同时纠正全网多数教程的错误误区:修改NuGet环境变量无需重启电脑。
一、认识NuGet四大缓存目录(C盘空间占用核心)
NuGet不会将依赖包局限在项目目录中,为了提升还原、安装效率,会在系统目录自动维护四类缓存文件,长期累积各版本依赖包,是.NET开发者C盘膨胀的主要原因。四类缓存默认全部存储在C盘,具体信息如下:
| 缓存类型 | Windows 默认C盘路径 | 核心作用 |
|---|---|---|
| global-packages 全局包 | %userprofile%\.nuget\packages |
存储解压完成的完整NuGet依赖包,体积最大、占用空间最多,项目运行、还原均优先读取此目录 |
| http-cache 网络缓存 | %localappdata%\NuGet\v3-cache |
缓存NuGet压缩包源文件,默认30分钟自动过期,用于加速重复下载、版本检索 |
| temp 临时目录 | %temp%\NuGetScratch |
存放包安装、还原过程中的临时文件,同时承担进程文件锁功能,协调多NuGet进程运行 |
| plugins-cache 插件缓存 | %localappdata%\NuGet\plugins-cache |
适用于NuGet4.8及以上版本,存储插件运行请求结果缓存,提升工具运行效率 |
可通过以下命令快速查看本机所有NuGet缓存的真实存储路径:
dotnet nuget locals all --list
二、一键清理C盘NuGet冗余缓存(紧急救急)
1. 前置必备操作
清理前必须关闭所有 Visual Studio、Rider、终端窗口及.NET相关后台进程,否则缓存文件被进程占用,会触发「文件正在使用、删除失败」的报错。
2. 命令行清理(推荐)
打开全新PowerShell或CMD窗口,执行以下命令,可按需全局清理或针对性清理指定缓存:
# 一键清理全部NuGet本地缓存(最常用)
dotnet nuget locals all --clear
# 单独清理体积最大的全局依赖包缓存
dotnet nuget locals global-packages --clear
# 单独清理HTTP网络缓存
dotnet nuget locals http-cache --clear
3. VS可视化清理方式
无需输入命令,可直接通过Visual Studio自带功能清理:工具 → NuGet包管理器 → 包管理器设置 → 常规 → 点击「清除NuGet本地资源」,效果等同于全局清理命令。
安全说明:清理本地NuGet缓存不会损坏任何项目源代码,仅删除本地冗余缓存文件。清理后首次还原项目时,会自动从官方NuGet源重新下载对应依赖包,完全安全无害。
本次实操中,清理完成后直接释放 6G+ C盘空间,彻底解除系统盘红色告警。但该方式仅为临时解决方案,未修改缓存路径的情况下,后续开发依旧会向C盘写入缓存,空间会再次被占满。
三、环境变量迁移缓存到机械D盘(根治方案)
根据微软官方文档明确说明:NuGet环境变量优先级最高,优先级高于 nuget.config 配置文件、MSBuild属性,配置后全局生效,完美适配VS、dotnet CLI所有开发场景,是最稳定的迁移方案。
1. 新建机械盘缓存目录
在大容量机械硬盘中新建根目录,示例路径:D:\NuGetCache。无需手动创建子文件夹,NuGet运行过程中会自动生成对应分类目录。
2. 环境变量选择:用户变量 VS 系统变量
很多开发者纠结变量添加位置,这里精准区分适用场景,按需配置即可:
✅ 99%个人开发者:添加【用户变量】
仅对当前Windows登录账号生效,无需管理员权限,配置简单、完全满足日常开发需求,本文默认推荐此配置。
✅ 特殊场景:添加【系统变量】
满足以下任意情况,需将4条NuGet变量添加至系统变量(整机全局生效):
-
电脑存在多个Windows登录账号,所有账号均需进行.NET开发,需统一缓存路径
-
本地运行系统级服务、CI自动编译、后台自动化构建任务(系统进程仅读取系统变量)
-
VS、dotnet以管理员身份运行,出现用户变量不生效的问题
核心区别:用户变量 = 单账号自用;系统变量 = 整机所有账号、系统服务全局生效。
3. 配置四条核心环境变量
此电脑 → 右键属性 → 高级系统设置 → 环境变量,根据自身场景新建对应变量,参数如下:
| 环境变量名 | 对应D盘缓存路径 |
|---|---|
NUGET_PACKAGES |
D:\NuGetCache\packages |
NUGET_HTTP_CACHE_PATH |
D:\NuGetCache\v3-cache |
NUGET_SCRATCH |
D:\NuGetCache\NuGetScratch |
NUGET_PLUGINS_CACHE_PATH |
D:\NuGetCache\plugins-cache |
4. 重点答疑:无需重启电脑!新终端直接生效
网上绝大多数教程要求「修改环境变量后重启电脑」,这是典型误区,本次实操结合Windows机制给大家讲透原理:
生效核心原理
Windows环境变量采用进程启动快照机制:
-
环境变量修改保存后,会即时写入系统注册表,永久生效;
-
修改前已打开的VS、终端、后台进程:启动时已加载旧环境变量至内存,不会自动刷新注册表新配置,依旧读取C盘旧缓存路径;
-
全新打开的终端/PowerShell:启动瞬间自动读取最新注册表配置,无需重启电脑,直接生效。
正确生效操作(替代重启整机)
仅需 彻底关闭所有Visual Studio并重新打开 即可。VS为常驻进程,不重启IDE会出现「命令行显示D盘路径、VS还原依旧写入C盘」的诡异问题。
5. 校验迁移是否成功
打开全新终端,执行校验命令:
dotnet nuget locals all --list
输出路径全部指向 D:\NuGetCache 下属目录,即代表缓存迁移配置完全成功。
四、最终效果验证
-
重启Visual Studio,打开任意.NET项目解决方案;
-
手动执行NuGet包还原操作;
-
查看D盘
D:\NuGetCache目录,自动生成对应缓存文件; -
C盘
.nuget目录不再新增任何缓存数据,迁移彻底生效。
小提示:机械硬盘读写速度略低于固态硬盘,首次包还原速度会有轻微下降,但完全不影响日常开发,可一劳永逸解决小容量固态C盘爆满问题,性价比极高。
五、踩坑总结 & 关键注意事项
-
清理文件占用报错:未关闭VS、终端等开发工具直接清理,会提示文件被占用,关闭所有.NET相关进程后重试即可;
-
环境变量生效误区:新终端即时生效,无需重启电脑,仅需重启VS保证IDE加载最新配置;
-
首次还原变慢:全局缓存清空后,首次项目还原需要重新下载所有依赖包,属于正常现象,后续还原会复用本地缓存,速度恢复正常;
-
配置优先级规则:NuGet环境变量优先级最高,会覆盖项目内 nuget.config 配置,实现全局路径统一;
-
无官方自动清理工具:NuGet官方未提供自动清理无用旧版本包的命令,日常可定期执行
dotnet nuget locals all --clear手动瘦身,或使用社区开源清理工具。
总结
对于使用小容量固态做系统盘的.NET开发者,C盘爆红切勿依赖系统简易清理工具,精准定位开发工具缓存才是核心解决方案:
-
优先排查
.nuget、npm 等开发专属缓存,这类文件是C盘空间占用的重灾区; -
通过
dotnet nuget locals all --clear命令可一键释放GB级冗余空间,快速救急; -
配置四条NuGet专属环境变量,可彻底将缓存迁移至机械硬盘,永久解决C盘膨胀问题;
-
掌握环境变量生效机制:新终端即时生效,仅需重启IDE,无需整机重启,规避全网通用误区。

浙公网安备 33010602011771号