sublime text 运行 c# 依赖系统已安装且 path 可见的 .net sdk;必须用 dotnet new 创建含 .csproj 的项目,构建系统 working_dir 需指向该项目目录,否则 dotnet run 失败。

Sublime Text 本身不能运行 C#,它只负责调用你系统里已装好的 dotnet CLI;没装 .NET SDK 或 dotnet 不在 PATH,所有配置都无效——这是 90% 失败的唯一原因。
验证 dotnet CLI 是否真正可用
别跳过这步。Sublime 的构建系统本质是执行命令行,如果终端里都跑不动 dotnet,那 Sublime 肯定也调不动。
- 打开终端(CMD / PowerShell / Terminal),执行
dotnet --version,必须输出类似8.0.300的版本号 - 若报错
'dotnet' is not recognized,说明没装或没进 PATH:Windows 安装时务必勾选「Add to PATH」;macOS 用brew install dotnet-sdk后,检查~/.zshrc是否有source $(brew --prefix)/etc/profile.d/dotnet.sh并已生效;Linux 用 snap 安装的版本常因权限问题被 Sublime 忽略,建议改用 tar.gz 包手动安装 - 进一步验证:运行
dotnet new console -o test && cd test && dotnet run,看到Hello, World!才算过关
必须用 dotnet new 创建项目,不能只写单个 .cs 文件
现代 .NET(5+)已弃用直接编译裸 .cs 文件的方式。csc 不再推荐,dotnet run 只认含 .csproj 的项目目录。
- 在目标文件夹下执行
dotnet new console(生成当前目录项目)或dotnet new console -n MyApp(生成子目录) - 确认该目录下存在
MyApp.csproj和Program.cs,且入口是标准顶层语句或static void Main - 不要把
hello.cs单独丢进一个空文件夹然后指望dotnet run能识别——会报错MSB1009: Project file does not exist - 如只是临时测几行代码,可单独装
dotnet script(dotnet tool install -g dotnet-script),但那是另一套机制,和本文的构建系统无关
配置 C# 构建系统(CSharp.sublime-build)
Sublime 的构建系统不是“插件”,只是一个 JSON 配置文件,告诉它按下 Ctrl+B 时去哪执行什么命令。关键在 working_dir 必须指向含 .csproj 的目录。
- 菜单栏 → Tools → Build System → New Build System…,粘贴以下内容并保存为
CSharp.sublime-build(路径必须是Packages/User/):
{
"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}}" 是核心:优先用 Sublime 已打开的项目路径,没开项目就退到当前文件夹——但该文件夹下必须有 .csproj,否则 dotnet run 直接失败${file_path}:它指向 .cs 文件所在目录,不是项目根目录,90% 的 “找不到项目” 错误源于此"selector": "source.cs" 让你一打开 .cs 文件,这个构建系统就自动激活,无需手动切换运行时常见错误与对应解法
报错不是配置错了,而是环境链某处断了。按顺序排查比重配更快。
-
No executable found matching command "dotnet-run":工作目录下没有.csproj,或.csproj文件损坏(比如被手动删了<targetframework></targetframework>节点) -
The project file could not be loaded. Data at the root level is invalid.:用记事本或其他非 UTF-8 编码编辑器改过.csproj,导致 BOM 或非法字符混入 - 构建成功但输出面板空白:Sublime 默认捕获 stdout,但某些 .NET 输出(如
Console.ReadKey())可能被缓冲或阻塞,加Console.WriteLine("..."); Console.Out.Flush();确认是否真没输出 - 中文乱码(尤其 Windows):确保系统区域设置为“UTF-8”,或在
.csproj中添加<propertygroup><consoleoutputencoding>UTF-8</consoleoutputencoding></propertygroup>
最易被忽略的点:Sublime 启动时读取的是它启动那一刻的环境变量。如果你刚配好 PATH,但 Sublime 是之前就开着的,那它根本看不到新 PATH —— 关掉重开,别信“重启终端就行”。











