dotnet CLI 必须在系统终端和 Sublime 中均可调用,否则构建失败;需验证 dotnet --version 和 dotnet run 输出 Hello, World!,并正确配置 working_dir 为含 .csproj 的目录。

dotnet CLI 必须在终端和 Sublime 中都可用
Sublime Text 本身不带 C# 编译器,所有“运行”动作本质是调用系统里的 dotnet 命令。如果 dotnet --version 在 CMD/PowerShell/Terminal 中报错 '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,因权限隔离导致 Sublime 调用失败;应改用 APT/YUM 官方源安装
验证必须走两步:dotnet --version 返回版本号(如 8.0.400),再执行 dotnet new console -o test && cd test && dotnet run 看是否输出 Hello, World!。成功后重启 Sublime Text——它不会自动读取新环境变量。
构建系统必须设 working_dir 为含 .csproj 的项目根目录
Sublime 不解析代码、不识别入口类,dotnet run 只在有 .csproj 的目录下才有效。把工作目录设成 ${file_path}(即 .cs 文件所在目录)是最常见错误,比如文件在 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 文件。没有项目结构,dotnet 根本不知道引用什么、从哪开始。
构建系统配置要点与 file_regex 必须匹配标准错误格式
保存为 CSharp.sublime-build 到 Packages/User/ 目录,核心字段不能少:
-
"cmd": ["dotnet","run"]—— 主运行命令 -
"selector": "source.cs"—— 确保打开任意.cs文件时自动激活该构建系统 -
"working_dir": "${project_path:${folder}}"—— 工作目录逻辑已说明 -
"file_regex": "^([^:]*):([0-9]+):([0-9]+):\s+(error|warning)\s+(.*)$"—— 这个正则必须严格匹配Program.cs(12,5): error CS1002: ; expected这类输出,否则错误无法双击跳转。网上很多变体漏转义括号或分组错位,Sublime 解析失败后错误就卡在底部面板里点不动
变体建议保留:Build(["dotnet","build"])和 Run (No Build)(["dotnet","run","--no-build"]),避免每次修改都触发完整重建。
单文件快速测试不要硬套 dotnet run
临时试一段逻辑,别新建项目再删 Program.cs。更直接的路有两条:
- 装
dotnet script:dotnet tool install -g Microsoft.dotnet-script,然后建hello.csx,用dotnet script hello.csx运行(注意是.csx后缀,不是.cs) - 简单无引用场景用系统自带
csc(C# 编译器):csc Program.cs && Program.exe,但仅限 .NET Framework 旧环境,现代 .NET Core / 6+ 已弃用此方式
Sublime 不生成项目结构、不处理引用、不提供智能补全——它只负责把命令丢给终端。如果你需要跳转定义、实时类型提示,得额外部署 OmniSharp 服务器,这和构建系统无关,也超出轻量运行范畴。


















