在7月初,我立下了一个 Flag:要做一个专门为大语言模型(LLM)设计的 C# 运行器 MCP (Model-Protocol-Context)。我的小小执念,是希望 C# 能够像 Python 一样,成为大模型世界里的一等公民。
经过一段时间的构思、踩坑和开发,今天,我非常高兴地向大家宣布:这个项目——
C# Runner
已经正式开源发布了!这是一个高性能、高安全性的 C# 代码在线执行平台(沙箱),专为大语言模型(LLM)的 Function Calling、在线代码编辑器、动态脚本执行等场景而设计。我的目标很简单:
为 C# 在 AI 浪潮中争得一席之地,使其成为像 Python 一样被大模型轻松调度的“一等公民”
。这个项目的诞生,源于我此前对实现“毫秒级、高安全性”执行 C# 代码方案的大量研究和实验。现在,我将这些成果凝聚成了 C# Runner。
项目地址:https://github.com/sdcb/csharp-runner
缘起:一个毫秒级的梦想
一切始于一个简单而又极具挑战性的目标:
在「冷启动」场景下,把一段未知、可能不可信的 C# 代码编译并执行完毕的时间控制在 100ms 以内(理想 < 20ms),同时保证绝对的安全、可伸缩和跨平台。
现在大模型的 Function Calling 或 Code Interpreter 基本都是跑 Python,这让我很不甘心。我希望构建一个服务,能让 C# 代码的执行体验如丝般顺滑,快到毫秒级别;同时它必须固若金汤,即使用户提交了恶意代码,也无法对服务器造成任何危害。
在很多现代应用场景中,我们都渴望能动态地执行用户提供的 C# 代码。然而,这面临着两大核心挑战:
性能
:常规的dotnet run
方式涉及到 MSBuild、项目还原等重度操作,耗时通常在数百甚至上千毫秒,完全无法满足交互式场景的性能要求。安全
:执行一段未知的、可能不可信的代码,无异于在服务器上“裸奔”。必须有万无一失的沙箱机制来防止恶意代码破坏系统、窃取数据或滥用资源。
C# Runner
正是为解决这一对核心矛盾而生。效果演示
为了直观展示 C# Runner 的性能,我将一个示例网站部署到了 Azure 上。并且为了增加挑战,我只选择了一台 1GB 内存的、Azure 上最便宜的虚拟机。
演示地址:https://csharp.starworks.cc/
在这个网站上,你可以直接输入 C# 代码并执行,体验毫秒级的响应速度。无论是简单的 Console.WriteLine
,还是复杂的计算逻辑,都能在极短时间内完成。
它默认已经写了一段简单的代码,你可以去修改它,然后点击
Run Code
按钮,执行结果会显示在下方的 Output 区域:如果你细心观察,会发现这个 Output 区域是实时更新的。这得益于 C# Runner 对流式输出(Server-Sent Events, SSE)的支持,你可以实时看到代码的 stdout
、stderr
和最终结果。
这是目前这台 Azure 虚拟机的 htop
负载情况,资源占用非常低:
C# Runner 是如何工作的?
为了同时实现极致的性能和强大的安全性,C# Runner 采用了
基于 Docker 的 Host-Worker 架构
。Worker
:每个 Worker 都是一个独立的、轻量级的 Docker 容器。它是一个已经加载了 Roslyn Scripting 环境的 Web 服务,负责实际编译和执行 C# 代码。Host
:Host 是整个系统的入口和“大脑”。它维护着一个由多个 Worker 组成的“资源池”。这些 Worker 在系统启动时就已经提前创建并预热
,随时可以接收任务。
当一个代码执行请求到达 Host 时,Host 会通过负载均衡策略(如轮询)选择一个空闲的 Worker,并将代码交给它执行。这种“
池化 + 预热
”的模式,完美规避了 Docker 冷启动的性能开销,使得终端用户可以享受到毫秒级的响应速度。✨ 核心特性一览
🔒 安全为本 (Security First)
容器级隔离
: 所有代码均在独立的 Docker Worker 容器中执行,与主机环境彻底隔离。资源精细控制
: 可通过 Docker Compose 精确限制每个 Worker 的 CPU、内存、进程数等资源,防止资源滥用。执行超时
: 每个任务都可以设置超时时间,防止恶意死循环代码。自动回收
: 可配置 Worker 执行 N 次任务后自动销毁并由新的纯净实例取代,杜绝环境污染。
⚡ 性能至上 (Performance is Key)
Worker 预热与池化
: C# Runner 的“秘密武器”,将容器启动和环境初始化的开销提前,保证业务请求的高性能响应。Roslyn Scripting API
: 采用内存中编译执行的方式,速度远超传统dotnet run
。负载均衡
: Host 自动将请求分发到多个 Worker,轻松实现水平扩展。
🌐 功能丰富 (Feature-Rich & Ready to Use)
双协议支持
: 同时提供HTTP REST API
和MCP (Model-Protocol-Context)
接口,无缝对接传统应用和 AI Agent。流式输出 (SSE)
: 实时返回代码的stdout
、stderr
和最终结果,交互体验流畅。内置 Web UI
: 提供一个美观、易用的代码编辑器,支持语法高亮和Ctrl+Enter
快捷执行,方便快速测试和演示。一键部署
: 提供完整的 Docker Compose 解决方案,一条命令即可启动整个服务。
🚀 60 秒快速部署
体验 C# Runner 非常简单,你只需要提前安装好 Docker 和 Docker Compose。
1. 下载 docker-compose.yml
文件
curl -L https://raw.githubusercontent.com/sdcb/csharp-runner/refs/heads/master/docker-compose.yml -o docker-compose.yml
2. 一键启动服务
docker compose up -d
该命令会默认启动 1 个 Host 和 3 个 Worker 实例。
3. 开始使用!
部署成功后,在浏览器中打开 http://localhost:5050
,即可看到一个简洁的代码编辑界面,开始你的 C# 代码执行之旅!
🔧 灵活配置与使用
你可以通过 docker-compose.yml
文件轻松调整 Worker 的数量、资源限制以及回收策略,以适应不同的负载场景。
例如,将 replicas
修改为 10
,即可轻松将后端处理能力扩展到 10 个 Worker 实例。
# docker-compose.yml services: # ... host service ... worker: # ... deploy: replicas: 10 # 将 Worker 实例扩展到 10 个 resources: limits: cpus: '0.50' memory: 256M
无论是通过其
HTTP API
集成到你的业务系统,还是通过MCP 端点
empowering 你的 AI Agent,C# Runner 都提供了清晰、简单的调用方式。更多细节请参考项目主页的 API 文档。基于 MCP 协议调用
如果你需要 MCP 协议,并希望通过它来调用 C# Runner,可以使用以下代码示例:
var clientTransport = new SseClientTransport(new SseClientTransportOptions() { Name = "MyServer", Endpoint = new Uri("https://csharp.starworks.cc/mcp"), }); var client = await McpClientFactory.CreateAsync(clientTransport); // Execute a tool (this would normally be driven by LLM tool invocations). (await client.CallToolAsync( "run_code", new Dictionary<string, object?>() { ["code"] = "Console.WriteLine(\"Hello World!\");" }, new ProgressReporter(), cancellationToken: CancellationToken.None)) .StructuredContent.Dump(); public class ProgressReporter : IProgress<ProgressNotificationValue> { public void Report(ProgressNotificationValue value) { value.Dump(); } }
输出将是实时的流式结果:
{"kind":"stdout","stdOutput":"Hello World!\n"} { "kind": "end", "stdOutput": "Hello World!\n", "elapsed": 30 }
总结
C# Runner 为 .NET 生态提供了一个开箱即用、兼顾性能与安全的动态代码执行解决方案。我希望它能成为您在构建下一代应用,特别是与 AI 结合的应用时的得力工具。
这个项目是我个人的一次探索,也必然有许多可以改进的地方。欢迎大家试用、反馈,甚至参与贡献!
为项目点亮 Star ⭐
,这是对我最大的鼓励:https://github.com/sdcb/csharp-runner提交你的想法和代码
:欢迎通过 Issue 和 Pull Request 参与项目。加入 QQ 群讨论
:欢迎加入.NET 骚操作 QQ 群:495782587
,一起交流 .NET 和 AI 的有趣玩法!
这一切,似未曾拥有