vscode 不直接运行 c#,依赖 dotnet cli;报错主因是 sdk 缺失、路径未识别或项目结构不合法。环境变量继承问题导致终端可用但 vscode 内 command not found,需重启 vscode 全局进程;单文件打开无效,必须以含 .csproj/.sln 的文件夹方式打开;launch.json 中 "program" 必须指向真实存在的编译后 .dll 绝对路径;omnisharp 卡住常因系统依赖缺失或 sdk 路径未配置;所有操作必须在项目根目录下进行。

VSCode 本身不运行 C#,真正干活的是 dotnet CLI;报错几乎全指向 SDK 缺失、路径未识别或项目结构不合法——不是插件坏了,是底层工具链没接上。
dotnet 命令在终端能用,但在 VSCode 终端里报 command not found
这是最典型的环境变量继承问题。VSCode 启动时读取的是它启动那一刻的 shell 环境,不是你后来在终端里 source 过的新配置。
- Windows:安装 .NET SDK 时勾选“将 dotnet 添加到 PATH”(默认已勾),但必须**重启 VSCode 全局进程**(关掉所有窗口,任务管理器里杀掉所有 code.exe)
- macOS:如果你用
brew install --cask dotnet-sdk,它不会自动写入~/.zshrc;手动加一行export PATH="/opt/homebrew/bin:$PATH"(Apple Silicon)或/usr/local/bin(Intel),然后source ~/.zshrc再重启 VSCode - Linux:
sudo apt install dotnet-sdk-8.0后,确认/usr/share/dotnet在$PATH里;检查方式:echo $PATH | grep dotnet
打开单个 Program.cs 就卡在 “C# features are disabled”
OmniSharp 不解析孤立的 .cs 文件,它只响应有明确构建上下文的目录——也就是存在 .csproj、.sln 或 global.json 的文件夹。
- 错误做法:双击 Program.cs → VSCode 打开单文件 → 右下角提示 “C# features are disabled” → F5 调试直接失败
- 正确做法:终端执行
dotnet new console -n HelloCs,再用 VSCode 的 File > Open Folder… 打开HelloCs这个**文件夹**(不是里面的 .cs 文件) - 已误开?别在当前窗口折腾,关掉整个 VSCode 窗口,重新以文件夹方式打开
launch.json 中 "program" 字段总报 Cannot launch program 错误
这个字段必须是编译后生成的 .dll 的绝对路径,且该文件在调试前必须真实存在。写成 MyApp.cs、MyApp 或相对路径,都会触发这个错误。
- 确认
dotnet build成功执行过,bin/Debug/net8.0/MyApp.dll确实存在(路径中的net8.0必须和.csproj里<targetframework></targetframework>完全一致) - VSCode 默认生成的模板里这行是对的:
"program": "${workspaceFolder}/bin/Debug/net8.0/MyApp.dll" - 如果改过目标框架(比如改成
net6.0),必须同步改这里,否则找不到对应目录 - 不要手写绝对路径(如
C:Users...MyApp.dll),用${workspaceFolder}变量保证跨机器可移植
OmniSharp 卡在 “Starting…” 或 Output 面板报 The SDK 'Microsoft.NET.Sdk' could not be found
这说明 OmniSharp 启动时调用 dotnet 失败了,常见于 macOS 和 Linux 上缺失系统级依赖,或 SDK 路径未被正确发现。
- macOS:必须执行
xcode-select --install,否则dotnet build会因找不到 MSBuild 工具链而失败 - Linux(Ubuntu/Debian):除了
dotnet-sdk-8.0,还必须装libicu72和libssl3(版本号依发行版微调),否则 CoreCLR 初始化失败 - 手动指定 SDK 路径:在
settings.json加"omnisharp.dotnetPath": "/usr/share/dotnet"(Linux/macOS)或"C:\Program Files\dotnet"(Windows) - 首次加载慢是正常的:OmniSharp 会后台下载约 100MB 的语言服务器工具,状态栏显示 “OmniSharp: Starting…” 时别强制退出
最容易被忽略的一点:所有验证都必须在项目根目录下进行。哪怕 dotnet --version 和 dotnet --list-sdks 都返回正常,只要你在错误的路径里打开 VSCode,OmniSharp 就不会加载,调试、补全、错误检查全部失效——这不是配置错了,是工作区根本没被识别。











