MAUI 解决什么问题
过去做跨平台,Windows 一套 WPF、安卓一套 Kotlin、苹果一套 SwiftUI,三套代码三个团队。.NET MAUI 的思路是:用一套 C# 和 XAML,编译到 Windows、安卓、苹果、macOS 多个目标。业务逻辑共享,UI 尽量共享,平台差异用少量代码补上。
跨平台的本质不是「一套代码」,而是「尽量共享、差异可控」。
- WindowsWinAppSDK 宿主。
- 安卓原生控件映射。
- 苹果 iOSiOS 原生控件。
- macOSMac Catalyst 形态。
单项目多目标
MAUI 一个项目文件里声明多个 TargetFramework,一次构建产出各平台包。共享的页面、视图模型、网络层、数据库访问都放在核心项目,平台专属代码放平台目录。开发时在 Windows 上快速迭代,再切到安卓、苹果真机调试。
<!-- 伪代码:多目标项目片段 -->
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-windows10</TargetFrameworks>
共享 UI 与原生能力
MAUI 的控件不是 WebView 套壳,而是映射到各平台原生控件。列表在安卓用 RecyclerView、在苹果用 UITableView。共享 UI 层能拿到接近原生的性能和手感。设备传感器、相机、定位这些原生能力,通过 .NET 封装好的 API 调用。
平台差异化处理
没有哪个平台能 100% 一致。导航手势、安全区域、返回键行为都不同。MAUI 用条件编译、平台定制页面、以及按需调用平台特定 API 来处理差异。把差异收拢在小范围,别让核心逻辑被平台代码污染。
Blazor Hybrid 这条路
如果你已经有 Web 前端经验,Blazor Hybrid 是另一条路:用 Razor 组件写 UI,跑在原生壳里。它和 MAUI 共享同一套 .NET 运行时,适合本来就是 Web 思维的团队。但它是 WebView 渲染,性能和原生控件方案要按场景权衡。
- 核心共享逻辑、网络、数据层。
- UI 映射用原生控件,不用 WebView。
- 差异收拢平台代码隔离。
- 真机测每个目标都要跑真机。
选型与坑
MAUI 不是银弹。重度依赖平台原生特性的应用,强行跨平台反而吃力;简单工具类、内容型应用,跨平台收益最大。构建链路重、安卓苹果调试环境要求高,这些都是上手要留的预算。
小结与延伸阅读
.NET MAUI 让 C# 开发者不用再学多套技术栈。核心共享、原生映射、差异收拢,是它真正能落地的三件事。选对场景,一套代码真能覆盖多端。
- Windows 原生体验读《WinUI 3 与 WinAppSDK 进阶实战》。
- 苹果端读《SwiftUI 界面开发》。
- 打包分发读《Windows 应用打包与 MSIX 分发实战》。