csc.exe 依赖 .NET Framework 或 SDK 安装,未安装则不存在;验证方式为 cmd 中输入 csc,若提示“不是内部或外部命令”说明环境变量未配置,常见路径为 C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe(Framework 4.x)或需通过 dotnet.exe 调用 csc.dll(.NET 6+)。

确认 csc.exe 是否可用
不装 .NET Framework 或 SDK,csc.exe 就不存在,NppExec 再怎么配也跑不起来。先打开 cmd,输入 csc 回车——如果提示“不是内部或外部命令”,说明没配好环境变量。
常见路径是:C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe(对应 .NET Framework 4.x)或 C:\Program Files\dotnet\sdk\*\csc.dll(对应 .NET 6+,需用 dotnet.exe 调用)。前者直接加进系统 PATH 即可;后者得改脚本用 dotnet build 和 dotnet run,不能直调 csc。
- 验证方式:在 Notepad++ 里按
F6,输入cmd /c csc /version,能输出版本号才算通 - Win10/11 默认可能没装 .NET Framework 3.5/4.8,需到“启用或关闭 Windows 功能”里手动勾选
- 若用 .NET Core/.NET 5+,别硬套老式
csc命令,否则编译报错CS5001: 程序没有包含适合入口点的静态“Main”方法
NppExec 脚本必须设对当前目录
默认情况下,NppExec 执行命令时工作目录是 Notepad++ 安装路径(比如 C:\Program Files\Notepad++),而不是你代码所在的文件夹。csc 编译时找不到引用、生成的 .exe 也会丢那儿,运行时报“系统找不到指定的文件”。
关键动作不是只写 cd "$(CURRENT_DIRECTORY)",而是要在 NppExec 的 Advanced Options → Follow $(CURRENT_DIRECTORY) 打钩。这个选项控制的是整个脚本执行期间的默认路径上下文,比单条 cd 更可靠。
-
$(CURRENT_DIRECTORY)是 Notepad++ 内置变量,表示当前文件所在文件夹,带末尾反斜杠 - 如果脚本里写
cd "$(CURRENT_DIRECTORY)"但没勾选 Follow,cd只作用于那一行,下一行又回退到 Notepad++ 目录 - 未勾选时,生成的
test.exe会出现在 Notepad++ 安装目录,而不是你期望的项目文件夹里
编译命令要区分 .NET 版本和输出类型
老式 csc /t:exe /out:xxx.exe xxx.cs 仅适用于 .NET Framework 项目;.NET Core / .NET 5+ 默认用 SDK 风格项目,csc 不再直接支持单文件编译,得靠 dotnet 工具链。
如果你坚持用单文件 .cs(无 .csproj),推荐两种写法:
- Framework 场景(推荐初学者):
NPP_SAVE csc /t:exe /out:"$(NAME_PART).exe" "$(FULL_CURRENT_PATH)" && "$(CURRENT_DIRECTORY)$(NAME_PART).exe" - Core/5+/6+ 场景(需安装 SDK):
NPP_SAVE dotnet new console -n "$(NAME_PART)" --no-restore && copy "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)\$(NAME_PART)\Program.cs" /y && cd "$(CURRENT_DIRECTORY)\$(NAME_PART)" && dotnet run(太重,不建议日常用) - 更轻量的替代:
NPP_SAVE dotnet exec "$(FULL_CURRENT_PATH)"—— 仅限顶层有public static void Main的单文件,且需 .NET 6+ runtime
注意:/t:exe 和 /target:exe 等价,但漏写会导致默认输出为 .dll,后续执行失败。
中文输出乱码、控制台闪退怎么办
Notepad++ 自带的 NppExec 控制台默认编码是 GBK,而 C# 源码若存为 UTF-8(推荐),Console.WriteLine("你好") 就会显示成方块或问号。
根本解法不是改 Notepad++ 设置,而是让编译器和运行时统一用 UTF-8:
- 编译时加
/utf8output参数:csc /utf8output /t:exe ... - 源码文件必须以 UTF-8 with BOM 保存(Notepad++ 编码菜单里选“UTF-8-BOM”)
- 运行后立即退出?在脚本末尾加
&& pause,或者代码里加Console.ReadKey(); - 如果用了
dotnet run,它自带控制台停留逻辑;但dotnet exec不会暂停,需自行处理
最常被忽略的一点:NppExec 控制台本身不支持 Unicode 光标定位和宽字符渲染,哪怕编码对了,某些特殊符号仍可能错位——这不是配置问题,是终端限制。


















