vscode 必须打开含 .csproj 的文件夹才能启用 c# 功能,单独打开 .cs 文件会导致 omnisharp 禁用;正确做法是用 dotnet new 创建项目后通过“open folder”打开根目录,并确保 sdk 版本、launch.json 路径及 omnisharp 配置一致。

VSCode 不能直接运行单个 .cs 文件,必须基于含 .csproj 的项目结构才能编译、调试和获得完整语言支持——这是绝大多数新手卡住的根源。
dotnet run 报错 “Missing required assets” 怎么办
这不是插件没装好,而是 VSCode 没识别到项目上下文。OmniSharp 只在打开文件夹(含 .csproj 或 .sln)时才启动,单独双击 Program.cs 会直接禁用 C# 功能。
- 错误典型表现:
Cannot resolve symbol 'Console'、状态栏显示C# features are disabled - 正确做法:终端执行
dotnet new console -n MyApp,然后用 VSCode 的 File > Open Folder 打开MyApp文件夹(不是里面的Program.cs) - 验证就绪:状态栏右下角出现
OmniSharp: Ready,且Program.cs中无红色波浪线 - 已误操作?关闭所有窗口,删掉
.vscode文件夹,重来
F5 调试失败提示 “Could not find debug adapter for type 'coreclr'”
本质是调试器找不到可执行目标,常见于项目路径或 SDK 版本不匹配。
- 检查
.csproj中的<targetframework></targetframework>(如net8.0),是否与dotnet --list-sdks输出的版本一致 - 确认
launch.json的"program"字段指向的是.dll,例如"${workspaceFolder}/bin/Debug/net8.0/MyApp.dll",不是.cs文件或相对路径 - 如果改过
.csproj的框架版本,但没同步更新launch.json里的路径,F5 就会报错 - macOS 用户注意:
xcode-select --install缺失会导致dotnet build失败,进而让 F5 无法生成 DLL
dotnet run 和 F5 调试到底用哪个
两者底层都调用 dotnet build,但触发方式和用途完全不同,别混用。
-
dotnet run:命令行快速验证逻辑,在集成终端中执行,自动完成build → exec,无需launch.json - F5:真正调试模式,依赖
.vscode/launch.json配置,支持断点、变量监视、调用堆栈;首次按 F5 时 VSCode 会引导你选.NET Core环境并生成该文件 - 性能差异不大,但 F5 会强制 rebuild,
dotnet run默认跳过已缓存的 build 步骤 - 调试 ASP.NET Core 项目时,
launch.json必须加"env": { "ASPNETCORE_ENVIRONMENT": "Development" },否则中间件不生效
OmniSharp 卡在 “Starting…” 或 “Loading…”
不是网络慢,而是 SDK 路径未被识别或 Mono 干扰,尤其在 macOS Sequoia 或 .NET SDK 8.0.302+ 上高频出现。
- 先运行
dotnet --list-sdks,确保有输出;若为空,说明 PATH 未生效或装错了包(比如只装了 Runtime) - 手动指定 SDK 路径:在 VSCode
settings.json中添加"omnisharp.dotnetPath": "/usr/local/share/dotnet"(macOS/Linux)或"C:\Program Files\dotnet"(Windows) - 禁用 Mono 模式:
"omnisharp.useGlobalMono": "never",避免旧版 Mono 冲突 - 重启 OmniSharp:快捷键
Ctrl+Shift+P(Win)或Cmd+Shift+P(Mac),输入OmniSharp: Restart OmniSharp,比重启 VSCode 更快见效
最易被忽略的点:所有操作必须在项目根目录(即含 .csproj 的那一层)下进行,上一级或子目录都会导致路径解析失败;global.json 是多版本项目的隐性开关,没它时 SDK 版本选择可能出乎意料。











