<p>必须安装.NET SDK(非Runtime)且版本≥8.0,安装C# Dev Kit后重启VSCode窗口,并以文件夹方式打开含.csproj的项目;否则launch.json配置再正确也无法调试。</p>

VSCode 调试 C# 程序失败,基本不是“配置没写对”,而是环境链断在了前几步:没装对 SDK、C# Dev Kit 没重启、打开方式错成单文件——这几个点全过不了,launch.json 写得再漂亮也没用。
必须装 .NET SDK(不是 Runtime)且版本 ≥ 8.0
只装 ASP.NET Core Runtime 或 .NET Runtime 是无效的。VSCode 编译、调试、生成符号文件(.pdb)全靠 SDK 里的 dotnet build 和 dotnet run。低于 8.0 的 SDK(如 7.0)会导致 C# Dev Kit 启动失败,状态栏卡在 <no project></no>。
- 验证命令必须是
dotnet --list-sdks(不是--version),输出要含类似8.0.200 [/usr/local/share/dotnet/sdk]的行 - Windows 用户用 Scoop/Chocolatey 安装后,必须执行
scoop reset dotnet-sdk或refreshenv;macOS 用户改完~/.zshrc后,要彻底退出 VS Code 再重开,不能只关窗口 - Linux(Ubuntu/Debian)需额外装
libicu72和libssl3,否则dotnet build报Failed to initialize CoreCLR
C# Dev Kit 必须安装 + 重启窗口 + 文件夹方式打开
旧版 C# 扩展(OmniSharp)已不支持 .NET 8+ 的热重载和语言服务。当前唯一能自动识别项目、生成 launch.json、启用 dotnet run 调试流的是 C# Dev Kit,它不依赖 OmniSharp 进程,而是直连 dotnet CLI。
- 安装后必须点击弹窗 “Restart” 或手动执行
Developer: Reload Window;不重启 → 状态栏右下角不会显示C# (Dev Kit)和框架名(如net8.0) - 必须用
File > Open Folder打开含.csproj或.sln的目录;打开单个Program.cs→ 永远是纯文本模式,F5 报No debug adapter found - 已有代码但无项目文件?在根目录运行:
dotnet new sln→dotnet new console -n MyApp→dotnet sln add MyApp.csproj
launch.json 中 program 字段必须指向编译后的 DLL
VSCode 默认生成的模板里 "program": "${workspaceFolder}/bin/Debug/net8.0/MyApp.dll" 是对的。很多人手动改成 MyApp.cs 或删掉路径变量,结果报 Cannot launch program; setting 'program' must be an absolute path to the executable。
-
program不是源码路径,是构建产物路径;它依赖dotnet build成功执行,所以先确保终端能跑通dotnet build - 若项目用
net9.0,路径中net8.0要同步改为net9.0;框架名不匹配会导致 DLL 找不到 -
console字段建议设为"internalConsole"(Windows/macOS)或"integratedTerminal"(Linux),避免外部终端权限或路径问题
F5 第一次失败别急着改配置
刚打开项目按 F5,VSCode 通常会弹窗问:“Required assets to build and debug are missing… Add them?” —— 选 Yes 即可自动生成有效的 .vscode/launch.json 和 .vscode/tasks.json。手动生成或复制粘贴旧模板,反而容易带入过时字段(如已弃用的 type: "coreclr")。
- 如果没弹窗,说明 C# Dev Kit 没加载成功:检查状态栏是否显示项目名和框架,没显示就回退到前两步
- 生成后仍调试失败?看 Output 面板中
Dotnet Watch或C# Dev Kit日志,常见错误是Could not find required file 'MyApp.dll',本质还是构建没触发或路径不对 - Mac 用户注意:
/usr/local/share/dotnet/sdk/nugetfallbackfolder需加入 Docker 共享文件夹设置,否则容器内调试会因路径不可见而中断
真正卡住人的从来不是 launch.json 的语法,而是 dotnet 命令在 VS Code 终端里根本跑不起来、状态栏始终不显示框架名、或者以为打开了项目其实只是打开了一个 .cs 文件——这些点不确认清楚,所有后续操作都是在无效路径上打转。


















