卸载.NET 6 SDK后执行dotnet --version仍返回6.x版本如何解决
实话说我并不想回退到.NET 5,但由于工作相关的VS授权问题不得不执行该操作。
操作开始前,我执行dotnet --version命令,返回结果为预期的6.x版本。
Windows 应用和功能面板仅展示旧版本SDK,未显示.NET 6相关条目,我顺利卸载了所有旧版本SDK。
再次执行dotnet --version,仍然返回6.x版本。
微软官方指引推荐使用**.NET Uninstall Tool**,但该工具说明标注无法卸载通过VS 2019及更高版本安装的SDK(.NET 6随VS 2022分发安装),因此我并未实际尝试该工具,判断其无法适用。
随后我打开Visual Studio Installer选择修改选项,取消勾选.NET 6 SDK,勾选.NET 5(我仅需要保留.NET 5,不需要更高版本)。完成修改操作后重新打开Visual Studio Installer,显示已安装.NET 5、未安装.NET 6;同时Windows应用和功能面板也无.NET 6相关条目,仅显示已安装.NET 5,看似操作已全部完成。
但执行dotnet --version,返回结果仍然是6.x版本。
你遗漏了3个核心清理步骤,VS Installer和控制面板的卸载逻辑不会自动处理这些内容:
- 第一步:定位并删除所有残留的.NET 6实体文件
不要依赖卸载面板的已安装列表,直接执行dotnet --list-sdks命令,该命令会输出当前系统能识别到的所有SDK的版本号、对应物理存储路径,找到所有标注为6.x版本的SDK对应的文件夹,手动删除即可。
两个最常见的残留路径:- 全局SDK目录:
C:\Program Files\dotnet\sdk\下对应6.x版本号的文件夹,顺带把同级目录templates、packs、runtime、host下所有带6.x版本标识的子文件夹一并删除 - VS私有SDK目录:
C:\Program Files\Microsoft Visual Studio\2022\你的VS版本名\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\下的6.x版本相关文件夹,VS自带的SDK不会存到全局dotnet目录,这部分是最高发的残留点
- 全局SDK目录:
- 第二步:修正环境变量优先级并清除缓存
- 打开系统环境变量编辑面板,找到
Path变量,确认C:\Program Files\dotnet\(你安装.NET5的全局路径)的排序在所有其他带dotnet字样的路径之前,移除VS私有目录下的dotnet路径、C:\Program Files (x86)\dotnet\下的无效路径 - 所有修改完成后,必须完全关闭所有已打开的终端、PowerShell、CMD窗口,旧窗口会缓存修改前的环境变量,不重开怎么测试都会返回旧版本结果
- 打开系统环境变量编辑面板,找到
- 第三步:清除全局SDK版本绑定规则
打开当前用户根目录(C:\Users\你的用户名\),检查是否存在global.json文件,如果文件里配置了固定的.NET 6版本号,直接删除该文件,或者修改内容为你安装的.NET5对应版本号即可。如果不处理这个配置,哪怕文件全删了,dotnet命令也会优先找配置里指定的6.x版本。
全部操作完成后,新开终端执行dotnet --list-sdks,确认列表里仅存在你保留的.NET5版本,再执行dotnet --version就会返回正确的版本结果。
补充:你之前认为.NET Uninstall Tool不适用是误判,执行时加--force参数即可扫描到VS安装的SDK残留,不过手动按上述步骤清理可控性更高,不会误删需要保留的.NET5组件。
内容的提问来源于stack exchange,提问作者Josh

