什么是 .NET MAUI?
.NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。
使用 .NET MAUI,可以从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。
.NET MAUI 是开源的,是 Xamarin.Forms 的演变,从移动方案扩展到桌面方案,UI 控件从头开始重新生成,以提升性能和扩展性。 如果以前曾使用 Xamarin.Forms 生成跨平台用户界面,则会看到 .NET MAUI 的许多相似之处。 但是,也有一些差异。 使用 .NET MAUI,可以使用单个项目创建多平台应用,但如有必要,可以添加特定于平台的源代码和资源。 .NET MAUI 的主要目标之一是在单个代码库中实现尽可能多的应用逻辑和 UI 布局。
.NET MAUI 面向谁
.NET MAUI 是为那些希望实现以下目标的开发人员设计的:
- 使用 XAML 和 C# 编写跨平台应用,从 Visual Studio 中的单个共享代码库编写。
- 跨平台共享 UI 布局和设计。
- 跨平台共享代码、测试和业务逻辑。
.NET MAUI 的工作原理
.NET MAUI 将 Android、iOS、macOS 和 Windows 的 API 统一到一个 API 中,实现了一次编写,到处运行的开发体验,同时提供对每个本机平台各个方面的深度访问。
.NET 6 或更高版本提供了一系列特定于平台的框架,用于创建应用:适用于 Android 的 .NET、适用于 iOS 的 .NET、适用于 Mac Catalyst 的 .NET 和 Windows UI 3(WinUI 3)库。 这些框架都有权访问同一个 .NET 基类库(BCL)。 此库将基础平台的详细信息从代码中抽象化。 BCL 取决于 .NET 运行时,为代码提供执行环境。 对于 Android、iOS 和 macOS,环境由 Mono 实现,这是 .NET 运行时的实现。 在 Windows 上,.NET Core 公共语言运行时(CLR)提供执行环境。
虽然 BCL 使在不同平台上运行的应用能够共享常见的业务逻辑,但各种平台有不同的方式来定义应用的用户界面,并且它们提供了不同的模型来指定用户界面元素的通信和互作方式。 可以使用适当的特定于平台的框架(适用于 Android 的 .NET、适用于 iOS 的 .NET、适用于 Mac Catalyst 的 .NET 或 WinUI 3)单独为每个平台创建 UI,但此方法要求你为每个单独的设备系列维护一个基本代码。
.NET MAUI 提供了一个用于生成移动和桌面应用的 UI 的框架。 下图显示了 .NET MAUI 应用的体系结构的高级视图:
在 .NET MAUI 应用中,编写主要与 .NET MAUI 控件和 API 层(1)交互的代码。 然后,此层直接使用本机平台 API(3)。 此外,应用代码还可以根据需要直接调用平台 API。
.NET MAUI 应用可以在电脑或 Mac 上编写,并编译为本机应用包:
- 使用 .NET MAUI 构建的 Android 应用程序从 C# 编译为中间语言(IL),然后在应用启动时即时(JIT)编译为本机程序集。
- 使用 .NET MAUI 生成的 iOS 应用会完全进行提前(AOT)编译,从 C# 转换为原生 ARM 程序集代码。
- 使用 .NET MAUI 生成的 macOS 应用使用 Mac Catalyst(Apple 提供的一种解决方案),可将使用 UIKit 生成的 iOS 应用引入桌面,并根据需要使用其他 AppKit 和平台 API 对其进行扩充。
- 使用 .NET MAUI 生成的 Windows 应用使用 Windows UI 3 (WinUI 3) 库创建面向 Windows 桌面的本机应用。 有关 WinUI 3 的详细信息,请参阅 Windows UI 库。
注意
生成适用于 iOS 和 macOS 的应用需要 Mac。
.NET MAUI 提供的内容
.NET MAUI 提供了一组控件,可用于显示数据、启动作、指示活动、显示集合、选取数据等。 除了控件集合之外,.NET MAUI 还提供:
- 用于设计页面的复杂布局引擎。
- 用于创建丰富的导航类型的多种页面类型,例如抽屉。
- 支持数据绑定,使开发模式更加优雅和易于维护。
- 自定义处理程序以增强 UI 元素呈现方式的功能。
- 用于访问本机设备功能的跨平台 API。 这些 API 使应用能够访问设备功能,例如 GPS、加速计、电池和网络状态。 有关详细信息,请参阅 设备功能的跨平台 API。
- 跨平台图形功能,提供支持绘制形状和图像、组合操作和图形对象转换的绘图画布。
- 单个项目系统,它使用多目标来面向 Android、iOS、macOS 和 Windows。 有关详细信息,请参阅 .NET MAUI 单一项目。
- .NET 热重载,以便在应用运行时同时修改 XAML 和托管源代码,然后在不重新生成应用的情况下观察修改结果。 有关详细信息,请参阅 .NET 热重载。
用于设备功能的跨平台 API
.NET MAUI 为本机设备功能提供跨平台 API。 用于访问设备功能的 .NET MAUI 提供的功能示例包括:
- 访问传感器,例如设备上的加速计、指南针和陀螺仪。
- 能够检查设备的网络连接状态,并检测更改。
- 提供有关应用正在运行的设备的信息。
- 在应用之间将文本复制并粘贴到系统剪贴板。
- 从设备中选择一个或多个文件。
- 将数据安全地存储为键/值对。
- 利用内置的文本转语音引擎从设备读取文本。
- 启动基于浏览器的身份验证流,这些流侦听特定应用注册的 URL 的回调。
单个项目
.NET MAUI 单一项目采用开发应用时通常遇到的特定于平台的开发体验,并将其抽象化为面向 Android、iOS、macOS 和 Windows 的单个共享项目。
无论面向的平台如何,.NET MAUI 单一项目都提供简化且一致的跨平台开发体验。 .NET MAUI 单一项目提供以下功能:
- 一个可面向 Android、iOS、macOS 和 Windows 的共享项目。
- 用于运行 .NET MAUI 应用的简化调试目标选择。
- 单个项目中的共享资源文件。
- 一个指定应用标题、ID 和版本的应用清单。
- 根据需要访问特定于平台的 API 和工具。
- 单个跨平台应用入口点。
使用多目标和 SDK 样式项目启用 .NET MAUI 单项目。 有关 .NET MAUI 单项目的详细信息,请参阅 .NET MAUI 单项目。
热重载
.NET MAUI 包括对 .NET 热重载的支持,使你可以在应用运行时修改托管源代码,而无需手动暂停或命中断点。 然后,代码编辑可以应用于正在运行的应用,而无需重新编译。
.NET MAUI 还包括对 XAML 热重载的支持,使你能够保存 XAML 文件,并查看正在运行的应用中反映的更改,而无需重新编译。 此外,导航状态和数据将被保留,使你能够在用户界面上快速进行迭代,而不会丢失在应用中的位置。