终于将 csharp.exe 移植到 Windows 操作系统,使用在 Windows 中不安装 mono 也有了 C# 交互窗口。
在上一篇随笔“再谈 C# 交互窗口”6楼的评论中,DiryBoy 园友指出 csharp.exe 在 Windows 操作系统中运行出错貌似 .NET 4 新的安全规则在作怪,并给出一个解决类似问题的网址。具体原因是 .NET Framework 4 中引入了两级透明度,.NET Framework 4 规则使用第二级透明度(SecurityRuleSet.Level2),而 .NET Framework 2.0 规则使用第一级透明度(SecurityRuleSet.Level1)。所以在 Mono.CSharp.dll 的 C# 源程序代码的 AssemblyInfo.cs 文件文件中加入以下语句就可以解决这个问题:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
但是这样一来在 Ubuntu 操作系统中使用 mono 编译就无法通过了。
mono 2.8.1 中和 csharp.exe 和 Mono.CSharp.dll 相关的 C# 源程序总共只有六十个左右,分布在以下目录中:

Mono.CSharp.dll 需要以下57个 C# 源文件:
这是 mcs/class/Mono.CSharp.dll.sources 文件的内容。注意在该文件中的目录分隔符原来是 Linux 操作系统的“/”,现在被我替换为 Windows 操作系统的“\”。
而 csharp.exe 只需要以下三个 C# 源文件:
这是 mcs/tools/csharp/csharp.exe.sources 文件的内容。然后,参照上一篇随笔,在 mcs/tools/csharp/repl.cs 文件第 59 行后加入以下一句:
Console.WriteLine(ex);
现在,编辑以下 mak.cmd 文件用来编译:
编译和运行结果如下:
这和上一篇随笔中的出错情况一样。现在让我们在 mcs/class/Mono.CSharp/Assembly/AssemblyInfo.cs 文件文件中加入以下语句:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
然后重新编译,运行:
终于在 Windows 操作系统下实现了 C# 交互窗口,并且没有安装 mono,而是只需要 Mono.CSharp.dll 和 csharp.exe 两个文件就可以了。
此外,还可以将 Mono.CSharp.dll 加入到全局程序集缓存中(需要管理员权限):
这样之后再将 csharp.exe 放到 PATH 中的目录里,就可以随时随处运行 C# 交互窗口了。
最后,本文提到的所有程序都可以点击这里下载。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述