VS Code调试.NET项目版本不一致 配置net6.0仍加载5.0运行时
.NET 5升级到6后VS Code调试加载旧版本运行时问题排查
问题现象
将项目所用.NET从5.0版本升级至6.0版本,使用Visual Studio Code执行构建与调试操作时,输出窗口显示OmniSharp服务已基于.NET 6启动:
OmniSharp server started with .NET 6.0.201
但调试控制台仍加载.NET 5版本的运行时文件:
Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.15\System.Private.CoreLib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
同一项目在Visual Studio中运行无异常,可正常加载.NET 6运行时:
'iisexpress.exe' (CoreCLR: DefaultDomain): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.3\System.Private.CoreLib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
已在项目.proj文件中指定目标框架为net6.0,相关配置如下:
<PropertyGroup> <TargetFramework>net6.0</TargetFramework> <RootNamespace>CS_Test</RootNamespace> <Configurations>Debug;Release;Linux</Configurations> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerfileContext>.</DockerfileContext> </PropertyGroup>
解决步骤
按以下顺序排查遗漏配置即可解决问题:
- 检查VS Code调试配置文件
.vscode/launch.json- 确认配置中
program字段指向net6.0目录下的编译输出dll,删除升级前残留的net5.0路径配置,正确格式参考:${workspaceFolder}/bin/Debug/net6.0/CS_Test.dll - 如果配置中存在
runtimeVersion字段且值为5.0.x版本,直接删除该字段,调试器会自动匹配项目目标框架对应的运行时版本
- 确认配置中
- 清理旧版本编译缓存
- 在项目根目录执行清理命令:
dotnet clean - 手动删除项目根目录下的
bin、obj文件夹,彻底清除net5.0版本的编译残留 - 重新执行构建命令生成net6.0版本编译产物:
dotnet build
- 在项目根目录执行清理命令:
- 校验OmniSharp运行配置
- 打开VS Code设置,搜索
OmniSharp: Dot Net Path,确认路径指向.NET 6 SDK对应的dotnet可执行文件,不要绑定到.NET 5安装目录 - 按
Ctrl+Shift+P调出命令面板,执行OmniSharp: Restart OmniSharp重启语言服务
- 打开VS Code设置,搜索
- 检查根目录SDK版本锁定配置
- 查看项目根目录是否存在
global.json文件,如果文件内指定SDK版本为5.0.x,修改为已安装的6.0版本号,或直接删除该文件,dotnet会自动匹配最新安装的6.0版本SDK
- 查看项目根目录是否存在
内容的提问来源于stack exchange,提问作者neanderslob
相关产品推荐
相关产品推荐

