.NET MAUI 跨平台应用框架技术调研
微软官方主推的 .NET 跨平台原生应用框架
.NET MAUI 继承 Xamarin.Forms 路线,让 C# 与 XAML 团队用单一代码库开发 iOS、Android、Windows 和 macOS 原生应用。
.NET MAUI 跨平台应用框架技术调研
.NET Multi-platform App UI(MAUI)是微软推出的 .NET 跨平台 UI 框架,作为 Xamarin.Forms 的继任者,使用 C# 与 XAML(或 C# Markup)编写单一代码库,编译为 iOS、Android、Windows 和 macOS 原生应用。2026 年随 .NET 9 持续演进,MAUI 是 微软技术栈移动端与桌面端统一开发 的官方首选路径。
一、 基本信息
| 维度 | 关键指标 / 描述 |
|---|---|
| 技术标签 | C# / XAML / .NET / 跨平台 / 原生控件 |
| 开发商 | Microsoft |
| 官方网站 | https://dotnet.microsoft.com/apps/maui |
| 官方文档 | https://learn.microsoft.com/dotnet/maui/ |
| GitHub 仓库 | https://github.com/dotnet/maui |
| 许可协议 | MIT License |
| 首次发布 | 2022 年(GA) |
| 当前版本 | .NET 9 + MAUI(2026 年) |
| 支持平台 | iOS、Android、Windows、macOS |
| 生态成熟度 | 中高(微软官方主推) |
二、 技术定位与简介
MAUI 将 Xamarin.Forms 的跨平台模型升级为 单项目多目标(Single Project) 架构:
- 共享 UI 层:
ContentPage、Shell导航、数据绑定。 - 平台 Head:
net9.0-android、net9.0-ios、net9.0-maccatalyst、net9.0-windows。 - 原生渲染:Android 映射 Material 控件,iOS 映射 UIKit,Windows 映射 WinUI 3。
与 Uno Platform 差异:MAUI 使用自有控件抽象,Uno 复用 WinUI API。与 Flutter 差异:MAUI 映射系统原生控件,非自绘。与 Blazor Hybrid 差异:MAUI 默认 XAML 原生 UI,Blazor 在 WebView 内渲染 Razor。
适合:.NET/C# 团队、企业内网应用、Xamarin 迁移、Windows+移动配套产品。
三、 快速上手安装说明
1. 环境要求
# 安装 .NET 9 SDK + Visual Studio 2022(含 MAUI 工作负载)
dotnet workload install maui
dotnet --version2. 创建项目
dotnet new maui -n MyMauiApp
cd MyMauiApp
dotnet build -t:Run -f net9.0-android3. XAML 页面示例
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
x:Class="MyMauiApp.MainPage">
<VerticalStackLayout Padding="24" Spacing="12">
<Label Text="Hello MAUI" FontSize="24" />
<Button Text="Click" Clicked="OnClicked" />
</VerticalStackLayout>
</ContentPage>// MainPage.xaml.cs
private int _count;
void OnClicked(object sender, EventArgs e)
{
_count++;
((Button)sender).Text = $"Clicked {_count}";
}4. C# Markup 替代写法
public class MainPage : ContentPage
{
public MainPage()
{
Content = new VerticalStackLayout
{
Children =
{
new Label { Text = "Hello MAUI" },
new Button { Text = "Click", Command = new Command(() => { }) }
}
};
}
}四、 核心特性
1. 单项目多目标
一个 .csproj 管理四端,资源与清单按平台条件包含。
2. Shell 导航
声明式路由、TabBar、Flyout、深链 URI 路由。
3. 数据绑定与 MVVM
INotifyPropertyChanged、Binding、CommunityToolkit.Mvvm 源生成器。
4. 平台特定代码
#if ANDROID / partial class / Platform 文件夹封装差异。
5. MAUI Blazor Hybrid
BlazorWebView 在原生壳内嵌入 Blazor,复用 Web 组件资产。
6. .NET 生态互通
Entity Framework、ASP.NET Core Client、SignalR、Identity 同一语言栈。
五、 适用场景
1. 黄金适用场景
- 企业已有 .NET 后端与 C# 团队,需移动+桌面客户端。
- Xamarin.Forms 存量迁移(官方提供升级工具与指南)。
- B 端工具、巡检、仓储、医疗等表单密集型应用。
- Windows 商店 + 移动端配套,统一技术栈降低维护成本。
2. 局限适用场景
- 纯前端 React/Vue 团队,不愿引入 C#/XAML。
- 需要 Web SEO 或浏览器直接访问(选 Blazor WASM 或 Web 框架)。
- 极致自定义 UI 动画(Flutter 自绘更灵活)。
- 小程序分发(选 Taro/uni-app)。
六、 技术亮点
1. 微软官方长期支持
与 Visual Studio、Azure、Entra ID 深度集成。
2. 原生控件映射
系统字体、无障碍、平台交互规范开箱即用。
3. 单语言全栈
C# 覆盖 UI、业务、API 客户端、单元测试。
4. Hot Reload
XAML 与 C# 热重载加速 UI 迭代(平台矩阵见文档)。
5. 庞大 NuGet 生态
SkiaSharp、Syncfusion、Telerik、CommunityToolkit 等商业与开源库。
七、 核心概念与架构
digraph MAUI_Arch {
rankdir=TB
node [shape=box, style="rounded,filled", fillcolor="#f0f9ff"]
App [label="MAUI App\n(XAML / C# Markup)", fillcolor="#bae6fd"]
MAUI [label=".NET MAUI Controls"]
Handlers [label="Platform Handlers"]
Android [label="Android Views"]
iOS [label="UIKit"]
Win [label="WinUI 3"]
Mac [label="macOS Catalyst"]
App -> MAUI
MAUI -> Handlers
Handlers -> Android
Handlers -> iOS
Handlers -> Win
Handlers -> Mac
}Handler 模型:MAUI 控件通过 ViewHandler 映射到各端原生实现,可自定义 Handler 扩展行为。
八、 技术局限与边界
- 包体积:.NET 运行时使基础包大于纯原生或 Flutter(可 AOT 裁剪)。
- UI 一致性:跨端控件行为仍有平台差异,需
#if或自定义 Renderer。 - 社区规模:开源插件与示例少于 Flutter/RN,部分依赖商业组件库。
- Web 非原生:MAUI 本身不输出 Web;需 Blazor Hybrid 或独立 Web 项目。
- 调试复杂度:四端矩阵 + iOS 需 macOS 构建机,CI 成本高。
- 版本耦合:MAUI 与 .NET SDK、Xcode、Android SDK 版本矩阵需严格对齐。
九、 生态地图
| 类别 | 代表 |
|---|---|
| MVVM | CommunityToolkit.Mvvm、Prism |
| UI 组件 | Syncfusion、Telerik、DevExpress |
| 图表 | LiveCharts2、Microcharts |
| 本地存储 | SQLite-net、EF Core |
| 网络 | Refit、HttpClient |
| 地图 | Microsoft.Maui.Controls.Maps、第三方 SDK |
| 测试 | xUnit、Appium、UITest(历史) |
十、 生态集成
| 方向 | 说明 |
|---|---|
| Azure | App Center(退役中)→ GitHub Actions + Azure DevOps CI。 |
| Entra ID | MSAL.NET 单点登录企业应用。 |
| ASP.NET Core | 共享 DTO、FluentValidation、Minimal API 客户端。 |
| SignalR | 实时通知;注意移动端后台连接策略。 |
| 推送 | Firebase(Android)、APNs(iOS)经插件或原生服务封装。 |
十一、 开发与工程化
1. 项目结构
MyMauiApp/
Platforms/
Android/
iOS/
MacCatalyst/
Windows/
Resources/
Views/
ViewModels/
MauiProgram.cs2. 依赖注入
MauiProgram.cs 中 builder.Services.AddSingleton<T>() 注册服务。
3. 配置分层
appsettings.json + 环境变量;敏感配置不进源码。
4. CI/CD
dotnet publish -f net9.0-android -c Release
dotnet publish -f net9.0-ios -c Release # 需 Mac十二、 性能与安全
- 列表用
CollectionView虚拟化,避免StackLayout嵌套长列表。 - 图片缓存与
FFImageLoading(社区)或官方Image异步加载。 - Android 启用 R8/ProGuard;iOS 配置 dSYM 符号表。
- 密钥使用
SecureStorageAPI,不进Preferences明文。 - Certificate Pinning 在
HttpClientHandler平台实现中配置。
十三、 技术对比
| 框架 | UI 模型 | 语言 | Web | 适合 |
|---|---|---|---|---|
| .NET MAUI | 原生映射 | C# | Blazor Hybrid | .NET 团队 |
| Uno Platform | WinUI/XAML | C# | WASM 原生 | WinUI 复用 |
| Flutter | 自绘 | Dart | Flutter Web | 跨端 UI 一致 |
| React Native | 原生桥接 | TS | 无 | React 团队 |
| Avalonia | 自绘 XAML | C# | 有限 | 跨桌面 OS |
十四、 最佳实践
- Xamarin.Forms 迁移先用 .NET Upgrade Assistant 评估兼容性。
- 复杂 UI 用
Shell统一导航,避免每页手工Navigation.PushAsync。 - 平台差异收敛到
Platforms/或partial方法,业务层保持纯 C#。 - 选型前 PoC 验证地图、支付、蓝牙等关键原生 SDK 的 MAUI 绑定。
- 锁定 .NET SDK 与 MAUI 工作负载版本,升级读 Release Notes。
- Blazor Hybrid 仅用于已有 Web 资产复用,纯原生体验仍用 XAML。
- 建立四端 UI 截图回归,原生控件在不同 OS 版本差异明显。
十五、 学习与社区资源
- 官方文档:https://learn.microsoft.com/dotnet/maui/
- Xamarin 迁移:https://learn.microsoft.com/dotnet/maui/migration/
- GitHub:https://github.com/dotnet/maui
- .NET MAUI Community Toolkit:https://learn.microsoft.com/dotnet/communitytoolkit/maui/
- 示例:https://github.com/dotnet/maui-samples