Sublime Text 本身不能编译或运行 C#,必须依赖已安装且可用的 .NET SDK;首要验证 dotnet --version 能输出版本号,并成功执行 dotnet new console && dotnet run 输出“Hello, World!”,再配置 working_dir 为 "${project_path:${folder}}" 的构建系统及 OmniSharp 插件。

Sublime Text 本身不能编译或运行 C#,它只是个编辑器;所有构建、运行、智能提示都依赖外部工具链。能不能用起来,第一关就看 dotnet --version 在终端里能不能跑通——不通过,后面全白配。
确认 .NET SDK 已安装且可用
这是最常被跳过的一步,但它是整个流程的基石。Sublime 不会帮你装 SDK,也不会报错说“你少东西”,只会静默失败。
- 在终端执行
dotnet --version,必须输出类似8.0.400的版本号 - macOS 推荐用
brew install dotnet-sdk(Homebrew 需已安装) - Ubuntu/Debian 按官网 APT 源方式添加并安装,别只下 tar.gz 手动解压——PATH 容易漏配
- Windows 安装时务必勾选“将 dotnet 添加到 PATH”,否则 Sublime 构建系统找不到命令
- 验证完后,顺手建个测试项目:
dotnet new console -n test && cd test && dotnet run,看到Hello, World!才算真正就绪
配置 Sublime Build System:让 Ctrl+B 跑 dotnet run
Build System 是 Sublime 调用外部命令的唯一通道。对 C# 来说,必须用 dotnet CLI,而不是老旧的 csc;而且路径必须指向项目根目录,否则 dotnet run 会报 Couldn't find a project to run。
- 菜单栏 Tools → Build System → New Build System…
- 粘贴以下内容(注意是 JSON 格式,别漏逗号):
{
"cmd": ["dotnet", "run"],
"selector": "source.cs",
"working_dir": "${project_path:${folder}}",
"variants": [
{
"name": "Build",
"cmd": ["dotnet", "build"]
},
{
"name": "Clean",
"cmd": ["dotnet", "clean"]
}
]
}
-
"working_dir"必须用${project_path:${folder}},不是${file_path}—— 否则你在子目录打开Program.cs,构建会尝试在该子目录下找.csproj - 不要用
shell_cmd字段,Sublime Text 4+ 更推荐cmd数组形式,避免 shell 注入和跨平台路径问题 - 保存为
Csharp.sublime-build,然后在 Tools → Build System 下选择它
启用 OmniSharp 实现跳转定义和实时错误检查
OmniSharp 是 Sublime 支持 C# 智能提示的唯一可行方案,但它不是即插即用——首次启动会下载服务器二进制,可能卡住几秒,也可能失败,失败后没提示,光标就停在那儿不动。
- 用 Package Control 安装
OmniSharp插件(搜索名就是 OmniSharp) - 同时建议装
C# Extensions,补全文件图标、代码片段和项目模板 - 如果打开
.cs文件后无高亮、无跳转、无波浪线报错,说明 OmniSharp Server 没起来:Preferences → Package Settings → OmniSharp → Settings,手动指定"omnisharp_server_path"指向本地OmniSharp.dll(可从 GitHub Releases 下载对应平台的 release 包) - OmniSharp 默认监听项目根目录下的
.csproj或sln,如果只开单个.cs文件没项目文件,它不会激活语言服务
跨平台开发要注意的三个硬约束
Sublime 本身跨平台,但 C# 项目行为是否一致,取决于你写代码时有没有踩坑。很多“在 Windows 能跑,Linux/macOS 报错”的问题,根源不在环境配置,而在代码本身。
- 路径拼接必须用
Path.Combine("a", "b"),别写"a/b"或"a\b"—— 后者在 macOS/Linux 直接抛异常 - 判断操作系统要用
OperatingSystem.IsLinux()/IsMacOS()/IsWindows(),别靠Environment.OSVersion字符串匹配 - 调试时别依赖
.exe文件:.NET 6+ 默认生成 DLL,dotnet run启动的是 DLL,不是 EXE;VS Code 的 launch.json 里写xxx.dll才对,Sublime 不调试,但心里得清楚这个区别
真正麻烦的从来不是配环境,而是当 dotnet run 成功但接口返回 500、或者文件写入失败却没报错时,得意识到:问题大概率出在跨平台 API 的使用方式上,而不是 Sublime 设置错了。










