[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"consumer-news-detail-1002":3,"consumer-news-interaction-1002":41,"consumer-news-related-1002":44},{"detail":4,"item":36},{"card":5,"schemaVersion":23,"fields":24,"content":30},{"id":6,"kind":7,"targetType":8,"targetId":9,"subtype":7,"typeLabel":10,"title":11,"subtitle":12,"summary":13,"coverUrl":14,"badgeText":15,"href":16,"sourceName":12,"meta":17,"metrics":20,"tags":21,"resolved":22},"NEWS_ARTICLE:1002","news","NEWS_ARTICLE",1002,"资讯","从对标 Java 到对标 Go：Native AOT 的\"无痛化\"之路，走到哪一站了？","博客园","从 .NET 7 的 demo 到 .NET 12 的无痛化，这条路要走五年。慢吗？慢。但对比一下：Java 的 GraalVM Native Image 折腾了更久，至今 Spring 生态的 AOT 体验仍在打补丁；Go 则是天生就站在终点线上——.NET 是在背着二十年的反射遗产追赶一个轻装上","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260907133134585-1733425989.png","","\u002Fnews\u002F1002",[18,19],"2026","软件开发",{},[19],true,"consumer-content-detail-v1",{"sourceName":12,"authorName":25,"categoryName":19,"summary":13,"description":13,"publishTime":26,"updateTime":27,"sourceUrl":28,"language":29},"张善友","2026-09-07T13:35","2026-09-11T15:22:02","https:\u002F\u002Fwww.cnblogs.com\u002Fshanyou\u002Fp\u002F22872615","中文",{"format":31,"policy":32,"normalized":22,"html":33,"text":34,"wordCount":35,"hasBody":22},"HTML","NEWS_CONTENT_V1","\u003Cblockquote>\n \u003Cp>.NET 11 RC1 发布在即。借这个时间点，聊聊 .NET 憋了四年的一招——Native AOT，以及它为什么直到今天才接近\"能用得好\"。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Chr>\n\u003Ch2>一句话回顾：.NET 的对手换了\u003C\u002Fh2>\n\u003Cp>在 .NET 8 之前，.NET 对标的从来都是 Java：JVM 对 CLR，Maven 对 NuGet，Spring 对 ASP.NET Core——大家都是\"虚拟机 + 大厂企业级\"的路数，比的是生态厚度、LTS 策略和工具链。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>但 Go 走了另一条路\u003C\u002Fstrong>：编译期直接出原生机器码，单文件部署、毫秒级启动、几十兆内存跑一个服务。在容器和 Serverless 时代，这套打法刀刀砍在 JVM\u002FCLR 系语言的软肋上——你还在等 JIT 预热，人家的容器已经弹起来又缩回去了。\u003C\u002Fp>\n\u003Cp>.NET 要还手，答案只有一个：\u003Cstrong>Native AOT\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Chr>\n\u003Ch2>四年五步：AOT 成熟度时间线\u003C\u002Fh2>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260907133134585-1733425989.png?w=720&amp;quality=65&amp;strip=all\" alt=\"NativeAOT成熟度演进2022-2026\">\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2022 年，.NET 7：出生。\u003C\u002Fstrong> Native AOT 首次发布，但只支持控制台应用，限制一大堆——这是 demo 级，证明\"能做\"，不证明\"能用\"。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2023 年，.NET 8：成年礼。\u003C\u002Fstrong> ASP.NET Core 接入 AOT，Docker 镜像从 GB 级压到 ~100MB，启动从秒级降到毫秒级。这是 .NET 第一次真正拿到和 Go 同场竞技的门票。所以说\".NET 8 才对标得了 Go\"，没毛病。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2024 年，.NET 9：修炼。\u003C\u002Fstrong> 修剪分析（trimming analysis）增强，BCL 兼容面扩大，但因为是 STS 版本，企业普遍观望。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2025 年，.NET 10（LTS）：工具链补齐。\u003C\u002Fstrong> 警告体系、兼容性开关、裁剪分析全部到位，AOT 第一次进入\"企业可落地\"状态。这也解释了上一篇半年总结里的数据：.NET 10 SDK 工作负载包直接杀进 NuGet 版本级下载 TOP10，周下载量从 54 亿冲到 67 亿——迁移浪潮里很大一部分就是奔着 AOT 和云原生来的。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2026 年 9 月，.NET 11 RC1：临门一脚。\u003C\u002Fstrong> 官方数据显示，.NET 11 的 Native AOT 支持库图规模继续扩大，\u003Cstrong>二进制体积平均再降 25%，容器冷启动再降 40%\u003C\u002Fstrong>（相对 .NET 10）。\u003C\u002Fp>\n\u003Chr>\n\u003Ch2>真正的痛点不在编译器，在生态\u003C\u002Fh2>\n\u003Cp>骂过 AOT 的人都清楚：让你崩溃的从来不是 \u003Ccode>PublishAot=true\u003C\u002Fcode> 本身，而是那一屏屏的 \u003Ccode>IL2xxx\u003C\u002Fcode>\u002F\u003Ccode>IL3xxx\u003C\u002Fcode> 警告——\u003Cstrong>它们几乎全部指向同一个元凶：反射\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Cp>看看 NuGet 下载榜前排的老将们是怎么工作的：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cstrong>Newtonsoft.Json\u003C\u002Fstrong>：运行时反射遍历类型元数据，想序列化谁就序列化谁——灵活，但对 AOT 裁剪是灾难；\u003C\u002Fli>\n \u003Cli>\u003Cstrong>AutoMapper\u003C\u002Fstrong>：运行时构建映射配置；\u003C\u002Fli>\n \u003Cli>\u003Cstrong>EF Core\u003C\u002Fstrong>：运行时构建实体模型；\u003C\u002Fli>\n \u003Cli>\u003Cstrong>各种 DI 容器\u003C\u002Fstrong>：\u003Ccode>Assembly.GetTypes()\u003C\u002Fcode> 扫描注册。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这些库的设计哲学诞生于\"反射自由\"时代。每一个 \u003Ccode>Type.GetProperties()\u003C\u002Fcode>，都是 AOT 链接器眼里的一颗雷——它不知道你运行时会摸到什么类型，只能保守保留，要么裁剪过度直接运行时爆炸。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>解法只有一个：Source Generator。\u003C\u002Fstrong> 把运行时反射干的活，挪到编译期用代码生成干完：\u003C\u002Fp>\n\u003Ctable>\n \u003Cthead>\n  \u003Ctr>\n   \u003Cth>反射时代\u003C\u002Fth>\n   \u003Cth>Source Generator 时代\u003C\u002Fth>\n  \u003C\u002Ftr>\n \u003C\u002Fthead>\n \u003Ctbody>\n  \u003Ctr>\n   \u003Ctd>Newtonsoft.Json\u003C\u002Ftd>\n   \u003Ctd>System.Text.Json source-gen 模式（性能已反超）\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>手写正则\u003C\u002Ftd>\n   \u003Ctd>RegexGenerator\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>日志字符串拼接\u003C\u002Ftd>\n   \u003Ctd>LoggerMessageAttribute\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>EF Core 运行时模型\u003C\u002Ftd>\n   \u003Ctd>Compiled Model\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>运行时配置绑定\u003C\u002Ftd>\n   \u003Ctd>Configuration.Binder 源生成器\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>REST 调用封装\u003C\u002Ftd>\n   \u003Ctd>Refit \u002F 各 SDK 的生成式客户端\u003C\u002Ftd>\n  \u003C\u002Ftr>\n \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>BCL 能做的已经做得差不多了。\u003Cstrong>现在的瓶颈是存量生态\u003C\u002Fstrong>——下载榜 TOP5 全是反射时代的老兵，它们的用户基数决定了转身速度。Newtonsoft.Json 单版本 8805 万次的下载量既是荣耀，也是整个生态 AOT 化的最大摩擦力。\u003C\u002Fp>\n\u003Chr>\n\u003Ch2>所以，\"无痛化\"到底什么时候算完成？\u003C\u002Fh2>\n\u003Cp>给个诚实的分期判断：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cstrong>.NET 10（已达成）\u003C\u002Fstrong>：工具链完成。警告可读、开关齐全、官方框架（ASP.NET Core、gRPC、Minimal API）全部 AOT 兼容。先锋团队可以上了。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>.NET 11（进行中）\u003C\u002Fstrong>：指标再优化，库图继续扩。RC1 这一两周就发，11 月 GA。但注意它是 STS，支持到 2028 年 11 月，和 .NET 10 同日退役——\u003Cstrong>它是试验场，不是主战场\u003C\u002Fstrong>。\u003C\u002Fli>\n \u003Cli>\u003Cstrong>.NET 12 LTS（2027 年 11 月，真正的终点线）\u003C\u002Fstrong>：给库作者两年窗口期把 source generator 版本补齐，到那个时候，主流依赖全面生成化，AOT 体验才算\"无痛\"——新项目默认开 AOT，就像今天默认用 \u003Ccode>dotnet new\u003C\u002Fcode> 一样自然。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr>\n\u003Ch2>实战样本：OpenClaw.NET，一个\"NativeAOT-friendly\"的 AI Agent 运行时\u003C\u002Fh2>\n\u003Cp>道理讲得再多，不如看一个真把 AOT 当一等公民的项目。开源项目 \u003Cstrong>OpenClaw.NET\u003C\u002Fstrong>（GitHub: clawdotnet\u002Fopenclaw.net，MIT 协议）是一个用 .NET 实现的自托管 AI Agent 运行时与网关，README 的第一句话就把自己定位成 \u003Cstrong>\"NativeAOT-friendly AI agent runtime and gateway for .NET\"\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Cp>它最有参考价值的地方，在于正面回答了上一节的那个矛盾：\u003Cstrong>Agent 系统天生想要动态性（插件、热加载、工具发现），AOT 天生想要静态性（编译期确定一切）\u003C\u002Fstrong>——怎么调和？\u003C\u002Fp>\n\u003Cp>OpenClaw.NET 的答案是\u003Cstrong>显式的能力分层\u003C\u002Fstrong>（capability lanes），写在架构文档里：\u003C\u002Fp>\n\u003Ctable>\n \u003Cthead>\n  \u003Ctr>\n   \u003Cth>能力泳道\u003C\u002Fth>\n   \u003Cth>内容\u003C\u002Fth>\n   \u003Cth>与 AOT 的关系\u003C\u002Fth>\n  \u003C\u002Ftr>\n \u003C\u002Fthead>\n \u003Ctbody>\n  \u003Ctr>\n   \u003Ctd>\u003Cstrong>Core\u003C\u002Fstrong>\u003C\u002Ftd>\n   \u003Ctd>运行时循环、网关、CLI、OpenAI 兼容 API\u003C\u002Ftd>\n   \u003Ctd>完全 NativeAOT 化\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>\u003Cstrong>Optional\u003C\u002Fstrong>\u003C\u002Ftd>\n   \u003Ctd>浏览器\u002FMQTT 协议包、渠道适配器、模型提供商、工作流后端\u003C\u002Ftd>\n   \u003Ctd>AOT 兼容的可选包\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>\u003Cstrong>Experimental\u003C\u002Fstrong>\u003C\u002Ftd>\n   \u003Ctd>嵌入式本地模型 sidecar（Gemma 4 GGUF 推理）\u003C\u002Ftd>\n   \u003Ctd>隔离为独立进程，不拖垮主程序 AOT\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>\u003Cstrong>JIT-only\u003C\u002Fstrong>\u003C\u002Ftd>\n   \u003Ctd>动态插件渠道、命令、钩子、原生动态 .NET 插件\u003C\u002Ftd>\n   \u003Ctd>\u003Cstrong>诚实标注：这些就是不能用 AOT\u003C\u002Fstrong>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>这个设计值得抄作业的点是：\u003Cstrong>它不和 AOT 的限制对抗，而是把限制画成架构边界\u003C\u002Fstrong>。需要动态加载的部分老老实实留在 JIT-only 泳道；需要毫秒启动、单文件部署的部分（网关、CLI）彻底静态化。最终交付物是三个平台的桌面包——每个包里直接装着 \u003Cstrong>NativeAOT 编译的网关和 CLI\u003C\u002Fstrong>，用户解压即用，连 .NET 运行时都不用装。这正是 Go 用户习以为常、而 .NET 开发者过去只能眼馋的体验。\u003C\u002Fp>\n\u003Cp>其他几个细节也能看出\"AOT 思维\"已经渗进了产品决策：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>\u003Cstrong>本地模型推理走 sidecar 进程\u003C\u002Fstrong>（Gemma 4 GGUF 包 + 监督式推理进程），原生依赖与主程序的 AOT 编译解耦；\u003C\u002Fli>\n \u003Cli>\u003Cstrong>复用 SKILL.md 包与 TS\u002FJS 插件生态\u003C\u002Fstrong>，但走清单发现（manifest discovery）而非反射扫描——编译期可确定；\u003C\u002Fli>\n \u003Cli>官方明确把 \u003Cstrong>NativeAOT trimming 改进\u003C\u002Fstrong>列为最欢迎的贡献方向之一。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>AI Agent 恰好是 AOT 价值最大的场景：网关要常驻、冷启动要快、内存占用要低、还要能在树莓派级别的设备上跑——OpenClaw.NET 这种\"把 AOT 写进产品定位\"的项目，在一年前几乎不可想象，而今年开始冒出来，本身就是生态转向的信号。\u003C\u002Fp>\n\u003Chr>\n\u003Ch2>结语\u003C\u002Fh2>\n\u003Cp>从 .NET 7 的 demo 到 .NET 12 的无痛化，这条路要走五年。慢吗？慢。但对比一下：Java 的 GraalVM Native Image 折腾了更久，至今 Spring 生态的 AOT 体验仍在打补丁；Go 则是天生就站在终点线上——.NET 是在背着二十年的反射遗产追赶一个轻装上阵的对手。\u003C\u002Fp>\n\u003Cp>好在数据站在 .NET 这边：NuGet 周下载量半年 +24% 冲到 67 亿，.NET 10 迁移浪潮如期而至，OpenTelemetry、gRPC 这些天生 AOT 友好的库正在占领下载榜。生态的重力方向已经变了。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>五年换一条起跑线，值了。\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Chr>\n\u003Cp>\u003Cem>延伸阅读：\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002Fshanyou\u002Fp\u002F22865021\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">《NuGet 半年度总结：周下载量从 54 亿到 67 亿》\u003C\u002Fa>；\u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002Fshanyou\u002Fp\u002Fgithub.com\u002Fclawdotnet\u002Fopenclaw.net\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">OpenClaw.NET 仓库：（文档站 AgentQi.dev）\u003C\u002Fa>；.NET 11 RC1 发布动态见微软 .NET 官方博客；实时数据见 nuget.org\u002Fstats。\u003C\u002Fem>\u003C\u002Fp>",".NET 11 RC1 发布在即。借这个时间点，聊聊 .NET 憋了四年的一招——Native AOT，以及它为什么直到今天才接近\"能用得好\"。 一句话回顾：.NET 的对手换了 在 .NET 8 之前，.NET 对标的从来都是 Java：JVM 对 CLR，Maven 对 NuGet，Spring 对 ASP.NET Core——大家都是\"虚拟机 + 大厂企业级\"的路数，比的是生态厚度、LTS 策略和工具链。 但 Go 走了另一条路：编译期直接出原生机器码，单文件部署、毫秒级启动、几十兆内存跑一个服务。在容器和 Serverless 时代，这套打法刀刀砍在 JVM\u002FCLR 系语言的软肋上——你还在等 JIT 预热，人家的容器已经弹起来又缩回去了。 .NET 要还手，答案只有一个：Native AOT。 四年五步：AOT 成熟度时间线 2022 年，.NET 7：出生。 Native AOT 首次发布，但只支持控制台应用，限制一大堆——这是 demo 级，证明\"能做\"，不证明\"能用\"。 2023 年，.NET 8：成年礼。 ASP.NET Core 接入 AOT，Docker 镜像从 GB 级压到 ~100MB，启动从秒级降到毫秒级。这是 .NET 第一次真正拿到和 Go 同场竞技的门票。所以说\".NET 8 才对标得了 Go\"，没毛病。 2024 年，.NET 9：修炼。 修剪分析（trimming analysis）增强，BCL 兼容面扩大，但因为是 STS 版本，企业普遍观望。 2025 年，.NET 10（LTS）：工具链补齐。 警告体系、兼容性开关、裁剪分析全部到位，AOT 第一次进入\"企业可落地\"状态。这也解释了上一篇半年总结里的数据：.NET 10 SDK 工作负载包直接杀进 NuGet 版本级下载 TOP10，周下载量从 54 亿冲到 67 亿——迁移浪潮里很大一部分就是奔着 AOT 和云原生来的。 2026 年 9 月，.NET 11 RC1：临门一脚。 官方数据显示，.NET 11 的 Native AOT 支持库图规模继续扩大，二进制体积平均再降 25%，容器冷启动再降 40%（相对 .NET 10）。 真正的痛点不在编译器，在生态 骂过 AOT 的人都清楚：让你崩溃的从来不是 PublishAot=true 本身，而是那一屏屏的 IL2xxx\u002FIL3xxx 警告——它们几乎全部指向同一个元凶：反射。 看看 NuGet 下载榜前排的老将们是怎么工作的： Newtonsoft.Json：运行时反射遍历类型元数据，想序列化谁就序列化谁——灵活，但对 AOT 裁剪是灾难； AutoMapper：运行时构建映射配置； EF Core：运行时构建实体模型； 各种 DI 容器：Assembly.GetTypes() 扫描注册。 这些库的设计哲学诞生于\"反射自由\"时代。每一个 Type.GetProperties()，都是 AOT 链接器眼里的一颗雷——它不知道你运行时会摸到什么类型，只能保守保留，要么裁剪过度直接运行时爆炸。 解法只有一个：Source Generator。 把运行时反射干的活，挪到编译期用代码生成干完： 反射时代 Source Generator 时代 Newtonsoft.Json System.Text.Json source-gen 模式（性能已反超） 手写正则 RegexGenerator 日志字符串拼接 LoggerMessageAttribute EF Core 运行时模型 Compiled Model 运行时配置绑定 Configuration.Binder 源生成器 REST 调用封装 Refit \u002F 各 SDK 的生成式客户端 BCL 能做的已经做得差不多了。现在的瓶颈是存量生态——下载榜 TOP5 全是反射时代的老兵，它们的用户基数决定了转身速度。Newtonsoft.Json 单版本 8805 万次的下载量既是荣耀，也是整个生态 AOT 化的最大摩擦力。 所以，\"无痛化\"到底什么时候算完成？ 给个诚实的分期判断： .NET 10（已达成）：工具链完成。警告可读、开关齐全、官方框架（ASP.NET Core、gRPC、Minimal API）全部 AOT 兼容。先锋团队可以上了。 .NET 11（进行中）：指标再优化，库图继续扩。RC1 这一两周就发，11 月 GA。但注意它是 STS，支持到 2028 年 11 月，和 .NET 10 同日退役——它是试验场，不是主战场。 .NET 12 LTS（2027 年 11 月，真正的终点线）：给库作者两年窗口期把 source generator 版本补齐，到那个时候，主流依赖全面生成化，AOT 体验才算\"无痛\"——新项目默认开 AOT，就像今天默认用 dotnet new 一样自然。 实战样本：OpenClaw.NET，一个\"NativeAOT-friendly\"的 AI Agent 运行时 道理讲得再多，不如看一个真把 AOT 当一等公民的项目。开源项目 OpenClaw.NET（GitHub: clawdotnet\u002Fopenclaw.net，MIT 协议）是一个用 .NET 实现的自托管 AI Agent 运行时与网关，README 的第一句话就把自己定位成 \"NativeAOT-friendly AI agent runtime and gateway for .NET\"。 它最有参考价值的地方，在于正面回答了上一节的那个矛盾：Agent 系统天生想要动态性（插件、热加载、工具发现），AOT 天生想要静态性（编译期确定一切）——怎么调和？ OpenClaw.NET 的答案是显式的能力分层（capability lanes），写在架构文档里： 能力泳道 内容 与 AOT 的关系 Core 运行时循环、网关、CLI、OpenAI 兼容 API 完全 NativeAOT 化 Optional 浏览器\u002FMQTT 协议包、渠道适配器、模型提供商、工作流后端 AOT 兼容的可选包 Experimental 嵌入式本地模型 sidecar（Gemma 4 GGUF 推理） 隔离为独立进程，不拖垮主程序 AOT JIT-only 动态插件渠道、命令、钩子、原生动态 .NET 插件 诚实标注：这些就是不能用 AOT 这个设计值得抄作业的点是：它不和 AOT 的限制对抗，而是把限制画成架构边界。需要动态加载的部分老老实实留在 JIT-only 泳道；需要毫秒启动、单文件部署的部分（网关、CLI）彻底静态化。最终交付物是三个平台的桌面包——每个包里直接装着 NativeAOT 编译的网关和 CLI，用户解压即用，连 .NET 运行时都不用装。这正是 Go 用户习以为常、而 .NET 开发者过去只能眼馋的体验。 其他几个细节也能看出\"AOT 思维\"已经渗进了产品决策： 本地模型推理走 sidecar 进程（Gemma 4 GGUF 包 + 监督式推理进程），原生依赖与主程序的 AOT 编译解耦； 复用 SKILL.md 包与 TS\u002FJS 插件生态，但走清单发现（manifest discovery）而非反射扫描——编译期可确定； 官方明确把 NativeAOT trimming 改进列为最欢迎的贡献方向之一。 AI Agent 恰好是 AOT 价值最大的场景：网关要常驻、冷启动要快、内存占用要低、还要能在树莓派级别的设备上跑——OpenClaw.NET 这种\"把 AOT 写进产品定位\"的项目，在一年前几乎不可想象，而今年开始冒出来，本身就是生态转向的信号。 结语 从 .NET 7 的 demo 到 .NET 12 的无痛化，这条路要走五年。慢吗？慢。但对比一下：Java 的 GraalVM Native Image 折腾了更久，至今 Spring 生态的 AOT 体验仍在打补丁；Go 则是天生就站在终点线上——.NET 是在背着二十年的反射遗产追赶一个轻装上阵的对手。 好在数据站在 .NET 这边：NuGet 周下载量半年 +24% 冲到 67 亿，.NET 10 迁移浪潮如期而至，OpenTelemetry、gRPC 这些天生 AOT 友好的库正在占领下载榜。生态的重力方向已经变了。 五年换一条起跑线，值了。 延伸阅读：《NuGet 半年度总结：周下载量从 54 亿到 67 亿》；OpenClaw.NET 仓库：（文档站 AgentQi.dev）；.NET 11 RC1 发布动态见微软 .NET 官方博客；实时数据见 nuget.org\u002Fstats。",3224,{"id":6,"kind":7,"title":11,"summary":13,"image":14,"href":16,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":40},"2026 · 软件开发","#2563eb","16 \u002F 10",[19],{"targetType":8,"targetId":9,"likedByMe":42,"likeCount":43,"commentCount":43,"contentLikeCount":43,"contentCommentCount":43,"sourceLikeCount":43,"sourceCommentCount":43},false,0,[45,52,58,65,72,79,85,91],{"id":46,"kind":7,"title":47,"summary":48,"image":49,"href":50,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":51},"NEWS_ARTICLE:927","HelloCrab - 短视频开源爬虫，仅供学习参考","HelloCrab 基于 Avalonia、Playwright、AI与 FFmpeg 的跨平台桌面采集器，支持9大平台，以及 Android、iOS、Browser 远程控制端。 Made By ChatGPT &amp; Vincent with ❤ 平台 是否接入 哔哩哔哩 ✅ 抖音 ✅ 快手","https:\u002F\u002Fwww.cnblogs.com\u002Fhupo376787\u002Fp\u002FScreenshot\u002FWindows.jpg","\u002Fnews\u002F927",[19],{"id":53,"kind":7,"title":54,"summary":55,"image":15,"href":56,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":57},"NEWS_ARTICLE:929",".NET 异常处理的\"暗门\"：代码里写满 catch，你依然能抓住它——从一个 AI Agent 运行时的源码说起","一个健壮的系统，必然到处都是有意的 catch；异常被消化不等于问题不存在。 观测与韧性，是一个硬币的两面——降级逻辑保证系统不崩，FirstChance 保证你能看见它为什么降级。","\u002Fnews\u002F929",[19],{"id":59,"kind":7,"title":60,"summary":61,"image":62,"href":63,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":64},"NEWS_ARTICLE:933","写给 C++ 工程师的 OpenClaw.NET 上手指南：用你熟悉的 C++ 思维，跑起一个生产级 AI Agent","它像一个「基于 boost.asio + REST 端点的常驻服务」——对外是 HTTP \u002F WebSocket \u002F 各 IM 的 webhook，对内跑着一个能调工具、读写记忆、跨渠道对话的 AI Agent——只不过协程不用你手写 promise_type，内存不用你管 new\u002Fdelete。","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260905070811424-1837144874.jpg","\u002Fnews\u002F933",[19],{"id":66,"kind":7,"title":67,"summary":68,"image":69,"href":70,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":71},"NEWS_ARTICLE:952",".NET 11 RC1 发布：拿到\"准生证\"，生产环境可以上了！","从 Preview 1 到 RC1，.NET 11 的拼图基本完整了：Runtime Async 反超状态机模型、CoreCLR 登陆 WebAssembly、CLI 全面 NativeAOT 化（dotnet tool list 快 5.5 倍）、C# 15 补齐 union 和 labeled","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260909153805786-850851443.png","\u002Fnews\u002F952",[19],{"id":73,"kind":7,"title":74,"summary":75,"image":76,"href":77,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":78},"NEWS_ARTICLE:961","从零搭建ELK日志采集系统：Filebeat + Logstash + ES + Kibana 保姆级教程","轻量级架构，一份配置全搞定 一、前言 你是不是还在用 tail -f 和 grep 在多台服务器上翻日志？系统一出问题，就要登录三五台机器，来回切换窗口，定位一个Bug耗时半小时。 ELK 是业界最成熟的日志集中管理方案。本文将带你用 Docker Compose 一键部署 Filebeat + L","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1465907\u002F202609\u002F1465907-20260909162947190-195439361.png","\u002Fnews\u002F961",[19],{"id":80,"kind":7,"title":81,"summary":82,"image":62,"href":83,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":84},"NEWS_ARTICLE:980","写给 Rust 工程师的 OpenClaw.NET 上手指南：用你熟悉的 Rust 思维，跑起一个生产级 AI Agent","它像一个「axum 应用」——对外是 HTTP \u002F WebSocket \u002F 各 IM 的 webhook，对内跑着一个能调工具、读写记忆、跨渠道对话的 AI Agent——只不过 async 不用选 runtime，也不用和借用检查器格斗。","\u002Fnews\u002F980",[19],{"id":86,"kind":7,"title":87,"summary":88,"image":15,"href":89,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":90},"NEWS_ARTICLE:999","Vane.Dispatch 1.0.0 发布：一个与容器、传输层零耦合的 .NET 服务分发引擎","Vane.Dispatch 1.0.0 发布：一个与容器、传输层零耦合的 .NET 服务分发引擎 它的前身，可以追溯到一个叫 Ndf 的项目。从那时算起，已经过去了十多年。今天，它以 Vane.Dispatch 1.0.0 的名字正式发布。 序：十年磨一剑 做后端的人大抵都绕不开同一个问题：如何把&","\u002Fnews\u002F999",[19],{"id":92,"kind":7,"title":93,"summary":94,"image":15,"href":95,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":96},"NEWS_ARTICLE:1012","java 多线程开发系列之八：玩转多线程（线程的中断）","之前的线程协作，讲的是通过wait和notify方法，多线程之间进行互相条件唤醒的办法。除此之外我们还需要进行中断操作。等待和唤醒可参考前文https:\u002F\u002Fwww.cnblogs.com\u002Fjilodream\u002Fp\u002F22770136设想这样一个场景：长工在给地主家干活，日出而作，日落而息。思路很简单：","\u002Fnews\u002F1012",[19]]