<p>Sublime Text 本身不能原生运行 C# 脚本,所有执行依赖本地 dotnet CLI 或 csc.exe;配置失败主因是环境未通,而非 Sublime 设置错误。必须验证 dotnet --version 返回版本号且 dotnet run 输出 Hello, World!,working_dir 必须设为 "${project_path:${folder}}" 指向含 .csproj 的目录,并使用标准 file_regex 匹配错误格式。</p>

Sublime Text 本身不能“原生”运行 C# 脚本——它没有内置编译器或运行时,所有执行动作都依赖你本地是否装好、能否调用 dotnet CLI 或旧版 csc.exe。所谓“一键执行”,本质是把命令正确丢给系统终端;配置失败的 90% 情况,卡在环境没通,而非 Sublime 设置错了。
dotnet CLI 是否真可用?这是唯一硬门槛
Sublime 构建系统调用的是系统命令行里的 dotnet,不是它自己带的。如果终端里 dotnet --version 报错 'dotnet' is not recognized,那 Sublime 里任何构建配置都是空转。
- Windows 用户安装 .NET SDK 时必须勾选「将 dotnet 添加到 PATH」;不勾就等于没装
- macOS 用
brew install dotnet-sdk后,检查~/.zshrc是否含source $(brew --prefix)/etc/profile.d/dotnet.sh,并已执行source ~/.zshrc - Linux 用户慎用
snap install dotnet-sdk——snap 的权限隔离常导致 Sublime 无法调用,优先选apt或 tar.gz 官方包 - 验证必须走两步:
dotnet --version返回版本号(如8.0.400),再跑dotnet new console -o test && cd test && dotnet run看是否输出Hello, World! - 成功后务必重启 Sublime Text——它不会自动读取新环境变量
构建系统中 working_dir 必须指向 .csproj 所在目录
Sublime 不解析 C# 代码,也不识别 Main() 入口。它只负责把 dotnet run 命令发出去,而 dotnet run 只在有 .csproj 文件的目录下才有效。
- 写
"working_dir": "${file_path}"是最常见错误:比如文件路径是src/Program.cs,${file_path}就是src/,但.csproj通常在上层,结果报错No executable found matching command "dotnet-run"或MSB1009: Project file does not exist - 正确写法只有这一种:
"working_dir": "${project_path:${folder}}"——优先用 Sublime 项目路径,没开项目就退到当前文件夹,但该文件夹下必须有.csproj - 路径中含空格或中文,某些 shell 下会静默失败;建议全用纯英文、无空格路径
- 别试图用
dotnet run直接跑单个.cs文件;没.csproj就没项目上下文,dotnet根本不知道引用什么、从哪开始
CSharp.sublime-build 文件必须匹配标准错误格式
构建失败时能不能准确定位错误行,取决于 file_regex 是否能匹配 dotnet 输出的真实错误格式。错配会导致点击错误提示跳不到对应行。
- 保存为
Packages/User/CSharp.sublime-build(可通过 Sublime 的Preferences → Browse Packages → User进入) - 核心字段不能少:
"cmd": ["dotnet", "run"]、"selector": "source.cs"、"working_dir": "${project_path:${folder}}" -
file_regex必须严格匹配Program.cs(12,5): error CS1002: ; expected这类输出,推荐用:"^([^:]*):([0-9]+):([0-9]+):\s+(error|warning)\s+(.*)$" - 不要加
"encoding": "cp936"或类似字段——UTF-8 是默认且唯一稳妥选择;乱设编码反而导致中文错误信息乱码或正则失效
真正容易被忽略的是:Sublime 对路径和环境变量的“感知”完全被动,它不主动扫描项目结构,也不缓存环境状态。每次改完 PATH 或装完 SDK,必须关掉再打开 Sublime;每次换项目,必须确保 .csproj 和 .cs 文件在逻辑一致的目录层级里——否则 dotnet run 就是黑盒,连为什么失败都看不到报错。


















