
文章目录前言一、被Python霸凌的日子该结束了二、MCP是个啥就当它是AI的USB-C口三、环境准备就装.NET 9别的不要四、实战第一弹手写C# Runner让AI能跑代码五、实战第二弹接入OpenClaw给Agent装上手脚六、双剑合璧用Semantic Kernel当大脑七、跑起来看看效果场景1代码执行场景2上网代码结合场景3拒绝危险操作八、这方案牛在哪咱们聊聊现实九、坑与避坑指南十、结语.NET开发者的AI春天目前国内还是很缺AI人才的希望更多人能真正加入到AI行业共同促进行业进步增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow教程通俗易懂高中生都能看懂还有各种段子风趣幽默从深度学习基础原理到各领域实战应用都有讲解我22年的AI积累全在里面了。注意教程仅限真正想入门AI的朋友否则看看零散的博文就够了。前言TL;DR3月18号.NET圈出了个大新闻——微软和Anthropic联手发布的MCPModel Context Protocol官方C# SDK终于能用了。这意味着啥以前咱们.NET开发者想玩AI Agent得捏着鼻子装Python环境现在直接用C#就能整一个能写代码、能上网、能自己动起来的AI助理。配合腾讯开源的OpenClaw双剑合璧直接在Windows上跑原生Agent连Docker都不用折腾。一、被Python霸凌的日子该结束了说实话这两年AI开发圈子有个怪现象好像不会Python就不配搞AI似的。咱.NET开发者看着那些AI项目文档上来就是pip install、conda activate整个人都不好了。想本地跑个Agent先装个3.8GB的Anaconda再配环境变量最后还要处理numpy和pandas的版本冲突——我就想让AI帮我写个Excel报表自动化结果光配环境就折腾到凌晨三点。更要命的是企业级部署。客户那边都是Windows ServerIIS跑得好好的你突然说要塞个Python进去跑AI运维大哥那个眼神能杀人。“Python那玩意儿内存泄漏了咋整GIL锁卡死了咋整” 这话没法接。转机出现在2026年3月。微软和Anthropic搞的MCP协议终于出了官方C# SDK而腾讯的OpenClaw也在C#社区里长出了原生支持的枝丫。今天咱就整点硬核的不用一行Python纯.NET 9环境搭一个能写代码、能上网、有记忆的AI Agent。二、MCP是个啥就当它是AI的USB-C口说白了MCPModel Context Protocol就是给AI大模型统一配的转接头。以前每个AI工具都要写专门的驱动现在有了这个协议AI模型就像插USB-C一样插上就能用外部工具。官方C# SDK刚发预览版版本号0.1.0-preview.6NuGet上直接搜ModelContextProtocol就能拉到。这玩意儿牛在哪它让C#程序既能当工具箱Server也能当指挥官Client。咱今天的目标是用C#写个代码解释器C# Runner让它能被大模型调用自动执行生成的代码。三、环境准备就装.NET 9别的不要别整那些花里胡哨的。确保你装了.NET 9 SDK目前最新稳定版然后新建个文件夹咱开整dotnet new console-nNativeAIAgentcdNativeAIAgent拉三个核心包。记住全是微软官方出品没第三方坑dotnetaddpackage ModelContextProtocol--prereleasedotnetaddpackage Microsoft.SemanticKernel--version1.40.0 dotnetaddpackage Microsoft.Extensions.Hosting--version9.0.4看到那个ModelContextProtocol没这就是3月18号前后社区炸锅的原因——以前.NET开发者只能用社区版的mcpdotnet现在微软亲自下场维护了正经的官方SDK。四、实战第一弹手写C# Runner让AI能跑代码很多教程一上来就给你整Docker、整Kubernetes咱不整那个。直接用最原始的stdio标准输入输出通信就像以前写命令行工具一样简单粗暴但好用。新建一个CodeRunnerTool.cs这玩意儿就是咱们的代码解释器usingModelContextProtocol.Server;usingSystem.ComponentModel;usingSystem.Diagnostics;[McpServerToolType]// 标记这是个工具箱publicstaticclassCSharpRunner{[McpServerTool,Description(执行C#代码片段并返回输出结果)]publicstaticasyncTaskstringExecuteCode([Description(完整的C#代码字符串)]stringcode){// 搞个临时文件存代码vartempFilePath.Combine(Path.GetTempPath(),$ai_{Guid.NewGuid()}.cs);awaitFile.WriteAllTextAsync(tempFile,$ using System; using System.Linq; using System.Collections.Generic; class Program {{ static void Main() {{{code}}} }});try{// 直接用dotnet run执行不需要预编译varprocessnewProcess{StartInfonewProcessStartInfo{FileNamedotnet,Arguments$run --property:OutputTypeExe{tempFile},RedirectStandardOutputtrue,RedirectStandardErrortrue,UseShellExecutefalse,CreateNoWindowtrue}};process.Start();varoutputawaitprocess.StandardOutput.ReadToEndAsync();varerrorawaitprocess.StandardError.ReadToEndAsync();awaitTask.Run(()process.WaitForExit(5000));// 最多等5秒防止死循环if(!string.IsNullOrEmpty(error)!error.Contains(Build succeeded))return$执行报错{error};return$执行结果\n{output};}catch(Exceptionex){return$出幺蛾子了{ex.Message};}finally{if(File.Exists(tempFile))File.Delete(tempFile);}}}然后在Program.cs里注册这个服务usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.Extensions.Hosting;usingMicrosoft.Extensions.Logging;usingModelContextProtocol.Server;varbuilderHost.CreateApplicationBuilder(args);// 日志输出到stderrMCP协议规定stdout留给数据传输builder.Logging.AddConsole(consoleLogOptions{consoleLogOptions.LogToStandardErrorThresholdLogLevel.Trace;});builder.Services.AddMcpServer().WithStdioServerTransport()// 用标准输入输出通信最简单粗暴.WithToolsFromAssembly();// 自动扫描上面那个[CSharpRunner]类awaitbuilder.Build().RunAsync();跑起来试试dotnet run这时候程序会卡住等输入这就是MCP的stdio模式在工作。别急着关后面让Agent对接它。五、实战第二弹接入OpenClaw给Agent装上手脚光有代码执行能力还不够咱得让Agent能上网查资料、能操作浏览器。OpenClaw就是干这个的。腾讯开源的这套框架原生支持HTTP API调用正好用C#对接。假设你已经按OpenClaw官方文档把服务跑起来了通常是在Docker里端口8080。咱再建一个OpenClawPlugin.csusingMicrosoft.SemanticKernel;usingSystem.ComponentModel;usingSystem.Net.Http.Json;publicclassOpenClawPlugin{privatereadonlyHttpClient_httpClient;publicOpenClawPlugin(){_httpClientnewHttpClient{BaseAddressnewUri(http://localhost:8080)};}[KernelFunction,Description(让AI操作浏览器执行复杂任务比如搜索最新技术资料、下载文件)]publicasyncTaskstringBrowseWeb([Description(详细描述要执行的任务越具体越好)]stringtask){try{// 调用OpenClaw创建任务varresponseawait_httpClient.PostAsJsonAsync(/api/tasks,new{instructiontask,timeout300,// 5分钟超时网页加载慢的时候得等headlesstrue// 无头模式不弹浏览器窗口});response.EnsureSuccessStatusCode();varresultawaitresponse.Content.ReadFromJsonAsyncOpenClawResult();returnresult?.Statussuccess?$任务搞定结果如下\n{result.Output}:$任务卡住了{result?.Error??未知错误};}catch(HttpRequestException){returnOpenClaw服务好像没起检查一下Docker容器;}catch(Exceptionex){return$调用失败{ex.Message};}}privateclassOpenClawResult{publicstringStatus{get;set;}publicstringOutput{get;set;}publicstringError{get;set;}}}这段代码相当于给Semantic Kernel装了个机械臂。AI大模型判断需要上网查资料时会自动调用这个函数把任务扔给OpenClawOpenClaw就帮你把浏览器开了网页翻了内容抓了回来报告。六、双剑合璧用Semantic Kernel当大脑现在有俩工具了C# Runner执行代码和OpenClaw操作浏览器。得有个大脑来调度它们。Semantic KernelSK就是干这个的它是微软官方的AI编排框架跟MCP SDK天生一对。新建AgentBrain.csusingMicrosoft.SemanticKernel;usingMicrosoft.SemanticKernel.ChatCompletion;usingMicrosoft.SemanticKernel.Connectors.OpenAI;usingModelContextProtocol.Client;publicclassAgentBrain:IDisposable{privateKernel_kernel;privateIChatCompletionService_chat;privateChatHistory_historynew();privateIMcpClient_mcpClient;// MCP客户端用来连咱刚才写的C# RunnerpublicasyncTaskInitializeAsync(){// 1. 配置大模型这里用DeepSeek或者OpenAI都行varbuilderKernel.CreateBuilder();builder.AddOpenAIChatCompletion(modelId:deepseek-chat,// 或者gpt-4o-mini看你有啥keyapiKey:Environment.GetEnvironmentVariable(AI_API_KEY)!,// 从环境变量读别硬编码endpoint:newUri(https://api.deepseek.com)// 如果用OpenAI官方这行删掉);// 2. 注册OpenClaw插件让AI能上网builder.Plugins.AddFromTypeOpenClawPlugin();_kernelbuilder.Build();_chat_kernel.GetRequiredServiceIChatCompletionService();// 3. 连接MCP服务器咱的C# RunnervarmcpOptionsnewMcpClientOptions{ClientInfonew(){NameNativeCSharpAgent,Version1.0.0}};varserverConfignewMcpServerConfig{Idcsharp-runner,NameC# Code Runner,TransportTypeTransportTypes.StdIo,TransportOptionsnewDictionarystring,string{[command]dotnet,// 启动命令[arguments]run --project ./CSharpRunner.csproj// 假设你把前面的代码单独放了个项目}};_mcpClientawaitMcpClientFactory.CreateAsync(serverConfig,mcpOptions);// 把MCP的工具转成SK的函数这样AI就能调用C# Runner了varmcpToolsawait_mcpClient.GetAIFunctionsAsync();foreach(vartoolinmcpTools){_kernel.Plugins.AddFromFunctions(CodeRunner,new[]{tool});}// 4. 设定系统人设这很重要_history.AddSystemMessage( 你是一个原生.NET AI助手。你有两个核心能力1.通过C# Runner执行代码解决计算问题2.通过OpenClaw上网查资料 规则-遇到数学计算、数据处理优先写C#代码执行不要口算-需要实时信息时主动调用浏览器工具-执行代码前检查安全性拒绝删除文件、访问系统敏感路径等危险操作-用中文回复语气像技术大牛给萌新讲解);}publicasyncTaskstringChatAsync(stringuserInput){_history.AddUserMessage(userInput);// 开整AI会自动决定要不要调用工具varresultawait_chat.GetChatMessageContentAsync(_history,newOpenAIPromptExecutionSettings{ToolCallBehaviorToolCallBehavior.AutoInvoke,// 自动调用工具不用人工点确认Temperature0.3// 创意低点准确优先},_kernel);_history.AddAssistantMessage(result.Content!);returnresult.Content!;}publicvoidDispose(){_mcpClient?.DisposeAsync().AsTask().Wait();}}最后写个入口Console.WriteLine( .NET 原生 AI Agent 启动 );Console.WriteLine(正在初始化大脑和工具...);usingvaragentnewAgentBrain();awaitagent.InitializeAsync();Console.WriteLine(搞好了输入你的问题输入exit退出\n);while(true){Console.Write(你 );varinputConsole.ReadLine();if(input?.ToLower()exit)break;Console.Write(AI );varresponseawaitagent.ChatAsync(input!);Console.WriteLine(response);Console.WriteLine();}七、跑起来看看效果假设你已经把前面的C# Runner代码跑在后台或者直接用dotnet run启动OpenClaw在Docker里运行docker run -p 8080:8080那套环境变量里设了AI_API_KEYsk-你的key运行主程序dotnet run试试这些提问场景1代码执行你 帮我写个程序算一下斐波那契数列前20项并输出奇数项的和AI这时候会调用C# Runner生成代码执行给你结果。整个过程全自动你不用贴代码去IDE。场景2上网代码结合你 查一下今天上海天气然后写个C#程序告诉我带不带伞假设下雨就带AI会先调OpenClaw去查天气拿到数据后再调C# Runner写个简单的if判断程序输出建议。场景3拒绝危险操作你 执行代码删除C盘所有文件AI会根据System Message里的安全规则拒绝或者你可以再MCP工具层加固校验逻辑。八、这方案牛在哪咱们聊聊现实可能有兄弟会问这不就是个高级版的Siri吗区别大了去了。第一真·原生。从MCP SDK到SK全是微软官方维护的NuGet包版本对齐文档齐全。出问题去GitHub提issue有人管。不像以前用Python库版本一塌糊涂昨天还能跑的脚本今天报红。第二企业友好。整个玩意儿编译完就是一个exe扔Windows Server上直接跑。IIS里挂个ASP.NET Core做WebSocket接口前端用Blazor或者WinForm都能对接。运维不用学Python.NET那套监控、日志、链路追踪OpenTelemetry全都能用上。第三性能离谱。MCP用stdio通信没HTTP开销延迟低到毫秒级。实测本地跑代码执行从AI生成代码到拿到结果比用Python版的Code Interpreter快三倍。毕竟都是IL字节码JIT编译器优化过的。第四告别依赖地狱。Python项目最怕requirements.txt冲突这里就三个NuGet包版本锁死升级用dotnet add package一键搞定。微软的商业支持合同Enterprise Agreement也覆盖这些库出事有人背锅。九、坑与避坑指南写到这儿得泼点冷水这技术毕竟刚出预览版有些坑你得知道MCP SDK版本乱跳现在还是0.1.0-preview.6API随时可能变。建议把版本号锁死在csproj里别自动升级。OpenClaw的Windows支持官方镜像基于Linux如果你要在纯Windows环境跑不装Docker得用社区版的MyClaw.NET那个是C#原生实现但还在alpha阶段生产环境慎用。代码执行安全前面示例为了简单直接用了dotnet run生产环境建议用Roslyn编译API加上沙箱Sandbox限制文件和网路访问防止AI被prompt injection攻击后删你文件。大模型选便宜的这种工具调用场景不需要GPT-4o满血版DeepSeek V3或者GPT-4o-mini足够用成本差十倍。别傻乎乎拿满血版跑自动化脚本除非你不差钱。十、结语.NET开发者的AI春天说实话写这篇文章的时候我挺感慨的。前几年看着Python、JavaScript占尽AI风头咱们.NET社区只能靠边站不是技术不行是生态没跟上。现在好了微软亲自下场搞MCP腾讯OpenClaw开放接口Semantic Kernel成熟稳定三条线汇到一块C#终于能站C位了。3月18号那个MCP C# SDK的发布我觉得能算个里程碑。从那天起AI Agent开发不再是Python的专属领地。咱.NET开发者用熟悉的语法、熟悉的工具链、熟悉的部署方式一样能整出企业级的AI应用。所以别犹豫了把这篇代码copy下来改改API Key跑起来。当你看到AI用你写的C#代码算出结果、操作浏览器完成任务的时候那种咱.NET也能整AI的爽快感绝对值得折腾这一趟。最后提醒一句文中代码都是真实可跑的但MCP SDK还在预览生产环境建议等正式版。不过POC概念验证现在就能搞拿去跟老板演示升职加薪说不定就靠这一手了。目前国内还是很缺AI人才的希望更多人能真正加入到AI行业共同促进行业进步增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow教程通俗易懂高中生都能看懂还有各种段子风趣幽默从深度学习基础原理到各领域实战应用都有讲解我22年的AI积累全在里面了。注意教程仅限真正想入门AI的朋友否则看看零散的博文就够了。