大家好我是码农刚子。从 2001 到 2026Mono 完成了它的历史使命。.NET MAUI 移动应用首次跑在 CoreCLR 运行时上。引言一个时代的结束一个新时代的开始2026 年 5 月 12 日微软发布 .NET 11 Preview 4。与以往版本不同这个预览版包含一个足以载入 .NET 移动开发生涯的重大变更——自 .NET 11 起CoreCLR 正式成为 Android、iOS 和 Mac Catalyst 平台上 .NET MAUI 应用的默认运行时。这意味着Mono 在 .NET MAUI 移动端的 25 年征程画上了句号。Xamarin 时代延续至今的技术栈终于迎来了彻底的统一与重塑。用微软首席产品经理 David Ortinau 的话来说“你的移动应用现在运行在和 ASP.NET Core、Azure 服务、桌面应用一样的运行时上而这个运行时正驱动着全球数以百万计的生产工作负载。”这不仅是技术栈的更换更是 .NET 统一大业中最重要的一块拼图。Mono成就 .NET 移动时代的功臣要理解这次迁移的意义得先回到 2001 年。彼时Miguel de Icaza 启动了 Mono 项目目标只有一个——把 .NET 带到 Linux 上。谁也没想到这个开源项目最终能走这么远2009 年MonoTouch 将 C# 带到了 iPhone2011 年MonoDroid 紧随其后登陆 Android 平台Xamarin 将这些“实验”变成了一个平台服务了数百万开发者2016 年微软收购 Xamarin开启了通向 .NET MAUI 的旅程。Mono 就是支撑这一切的运行时Mono 的影响力远不止于微软的产品。Unity 游戏引擎基于 Mono 构建脚本运行时为全球最受欢迎的游戏引擎和数以百万计的游戏提供动力。Avalonia UI 依赖 Mono 将 .NET 桌面应用带入 LinuxUno Platform 在 WebAssembly 上借助 Mono 实现跨平台浏览器应用MonoGame 传承着 XNA 的衣钵。Godot 引擎的 C# 脚本后端同样由 Mono 驱动。正如 Ortinau 在技术博客中写下的这句话“Mono 让这一切成为可能。CoreCLR 成为 .NET MAUI 的默认运行时不是这段历史的终结而是新篇章的起点。”Mono 成就了 .NET 的“无处不在”如今轮到 CoreCLR 接过接力棒跑向更远的地方。核心变更哪个平台切换了哪个没变具体来说当你的 .NET MAUI 应用面向 .NET 11 构建时对于Release 和 Debug 构建无论哪种构建模式CoreCLR 都会自动成为 Android、iOS 和 Mac Catalyst 平台上的默认运行时。这并非毫无铺垫的“大跃进”。微软一直在为跨平台扩大 CoreCLR 的疆域——从最初的 Windows到 Linux、macOSAppKit再到 Android。而 .NET 11 Preview 4 中最大的不同在于我们把同一个 CoreCLR 运行时扩展到了 Android、iOS 和 Mac Catalyst 平台这些正是 .NET MAUI 中曾经还依赖 Mono 的最后几个平台。几点重要澄清需要开发者注意涵盖的平台为Android、iOS、Mac Catalyst 和 tvOS全都迁移到 CoreCLR。Blazor WebAssembly 不受影响——WASM 继续使用 Mono且 .NET 11 中不会改变。如果在迁移期间遇到问题你还可以选择切回 Mono——至少在 .NET 11 阶段是支持回退的。特别说明当你使用 NativeAOT 发布应用时应用既不跑在 Mono 上也不跑在 CoreCLR 上——它跑在一个最小化的 NativeAOT 运行时环境中并静态链接到你的原生二进制文件中。NativeAOT 是无运行时runtime-less的极端优化启动速度和二进制大小都具备明显优势。三大驱动力为什么要切换到 CoreCLR微软官方给出了三大原因清晰而有力。第一运行时统一此前.NET 移动应用运行在 Mono 上而服务端、桌面和云端应用运行在 CoreCLR 上。这种分裂意味着不同的 JIT 行为不同的 GC 行为不同的 bug surface开发者在不同场景下需要面对两套“脾气迥异”的运行时如今几乎所有的 .NET 11 工作负载共享同一个运行时有着相同的行为、特性、工具链和错误处理机制。代码在服务端的表现基本在移动端也一样。第二性能提升CoreCLR 带来了比 Mono 更好的整体性能。微软在 .NET 10 中已经将 CoreCLR 作为 Android 的实验性选项收到的反馈是启动时间和吞吐量都有明显提升。迁移后.NET MAUI 应用在所有平台上都能享受到 CoreCLR 的高性能 JIT 编译器、分层编译tiered compilation和完整的运行时诊断能力。微软合作伙伴软件工程师 Stephen Toub 曾在 .NET 10 发布时就指出CoreCLR 为 Android 带来了显著的性能改进和更快的启动时间。而从 Mono 的实际架构看Mono 虽然成熟、轻量、支持 AOT但在 GC 开销和重度分配场景下容易遇到瓶颈。CoreCLR 采用更先进的 GC元数据访问更快分层编译等机制让高频代码路径得到更好的优化。第三NativeAOT 编译的可用性这是本次迁移中尤为值得关注的技术亮点。CoreCLR 成为默认运行时跨平台获得 NativeAOT 编译成为可能。你不再受限于 Mono 的 AOT 实现而是可以直接使用 .NET 的 NativeAOT 工具链来发布应用。NativeAOT 将应用与一个最小化的运行时一起静态编译成原生二进制启动时间更短、内存占用更低、应用程序体积更小。尽管 .NET MAUI 早已在 Release 模式下默认使用 NativeAOT但 CoreCLR 路径下对 NativeAOT 的支持更为成熟和完整。这意味着开发者可以获得更好的移动端启动性能二进制体积更受控制部署到应用商店时遇到的安全和性能审查也更容易通过社区回声Unity 早已先行微软并不是唯一一家对 Mono 说“再见”的公司。游戏引擎巨头Unity 也已经开始了自己的 CoreCLR 迁移将其脚本运行时从 Mono 转向 CoreCLR。这说明 CoreCLR 在游戏和移动领域的价值得到了更广泛的印证。David Ortinau 在宣布这一消息时的一段话特别动情“我想向 Mono 生态圈的所有人致敬用 Unity 和 MonoGame 的游戏开发者用 Avalonia 和 Uno Platform 的跨平台团队那些早就证明 C# 属于移动端的 Xamarin 开发者。Mono 让一切成为可能它的 DNA 依然流淌在 CoreCLR 对移动端的支持中。Mono 指引我们走到了这里CoreCLR 将带我们走向更远的地方。”对开发者的影响和行动指南需要做什么.NET 11 Preview 4 默认使用 CoreCLR大部分现有 .NET MAUI 项目在新 SDK 下构建时会自动切换。微软建议你在测试环境中尽早尝试确保现有应用平滑过渡。如何回退到 Mono在 .NET 11 时间范围内如果你在迁移过程中遇到问题可以通过配置切回 MonoPropertyGroup UseMonoRuntimetrue/UseMonoRuntime /PropertyGroup⚠️ 但请务必注意这只是过渡方案Mono 在移动端的支持不会无限期延续下去。如何开始使用想要体验 .NET 11 Preview 4可以安装 .NET 11 SDKWindows 用户推荐使用 Visual Studio 2026 InsidersVS Code 用户配合 C# Dev Kit 扩展即可⚠️ 预览版不适合生产环境仅供评估与测试。更深层的生态位Mono 不会消失Mono 不会完全消失——微软仍会在 .NET 代码库中维护 Mono 运行时以支持WebAssembly 等特定场景。在 .NET 11 中CoreCLR 正在成为 Android 的默认运行时并启动了将 CoreCLR 引入 WebAssembly 的初步工作以最终替代 Mono。这是一个漫长的过程但方向明确。同时MAUI 本身也带来了其他质量优化惰性 ResourceDictionary 生成XAML 源生成现在将资源字典条目注册为工厂按需膨胀而非启动时全部加载——大型应用的资源字典初始化时间可提升约8 倍CSS 支持完全可修剪如果应用不使用 CSS 样式表CSS 基础设施将在发布时被修剪掉应用体积进一步减少InvalidateStyle和InvalidateVisualStates新 API让动态样式和视觉状态的重用更简单尤其适合热重载场景。总结这不是告别而是演进从 2001 年 Mono 开源项目启动到 2026 年 CoreCLR 成为 .NET MAUI 的默认运行时——25 年光阴一个技术生态完成了它的演进轮回。如果说 Mono 让 C# 第一次跑遍 Linux、Android、iOS那么 CoreCLR 则让 .NET MAUI 真正融入微软 .NET 大一统的主流运行时路线图。这次迁移或许短期内会带来一些小阵痛例如部分底层依赖 Mono 特性的库可能需要适配但长远看——运行时统一意味着更低的维护成本、更一致的行为、更强的性能以及 NativeAOT 带来的新想象空间。对 .NET MAUI 开发者而言CoreCLR 迁移不是一次额外的麻烦而是一个未来十年的性能与统一性跳板。现在是时候尝鲜 .NET 11 Preview 4把自己的移动应用放在 CoreCLR 上跑一跑迎接 .NET 统一的下一站。我是刚子一个写了六年 .NET 代码的程序员。原文链接.NET 11 Preview 4 震撼发布MAUI 抛弃 Mono全量迁移 CoreCLR性能与 NativeAOT 双炸场 - 码农刚子的开发笔记