什么是 .NET MAUI?

.NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。

使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。

.NET MAUI supported platforms.

.NET MAUI 是一款开放源代码应用,是 Xamarin.Forms 的进化版,从移动场景扩展到了桌面场景,并从头重新生成了 UI 控件,以提高性能和可扩展性。 如果以前使用过 Xamarin.Forms 来生成跨平台用户界面,那么你会注意到它与 .NET MAUI 有许多相似之处。 但也有一些差异。 通过使用 .NET MAUI,可使用单个项目创建多平台应用,但如果有必要,可以添加特定于平台的源代码和资源。 .NET MAUI 的主要目的之一是使你能够在单个代码库中实现尽可能多的应用逻辑和 UI 布局。

.NET MAUI 适合哪些用户

.NET MAUI 适用于以下开发人员:

  • 基于 Visual Studio 中的单一共享代码库,使用 XAML 和 C# 编写跨平台应用。
  • 跨平台共享 UI 布局和设计。
  • 跨平台共享代码、测试和业务逻辑。

.NET MAUI 如何运作

.NET MAUI 将 Android、iOS、macOS 和 Windows API 统一到单个 API 中,提供“编写一次就能在任何地方运行”的开发人员体验,同时还提供了对每个原生平台各个方面的深入访问。

.NET 6 或更高版本提供了一系列用于创建应用的特定于平台的框架:.NET Android、.NET iOS、.NET macOS 和 Windows UI 3 (WinUI 3) 库。 这些框架都可以访问相同的 .NET 基类库 (BCL)。 该库将底层平台的细节从代码中抽象出来。 BCL 依赖于 .NET 运行时来为代码提供执行环境。 对于 Android、iOS 和 macOS,该环境由 Mono 实现,它是 .NET 运行时的实现。 在 Windows 上,.NET CoreCLR 提供执行环境。

虽然 BCL 使在不同类型的设备上运行的应用能够共享常见的业务逻辑,但各种平台具有不同的方式来定义应用的用户界面,并且它们提供了不同的模型来指定用户界面元素如何通信和互操作。 可以使用特定于平台的适当框架(.NET Android、.NET iOS、.NET macOS 或 WinUI 3)分别为每个平台创建 UI,但此方法要求你为每个单独的设备系列维护代码库。

.NET MAUI 提供了用于为移动和桌面应用生成 UI 的单一框架。 下图显示了 .NET MAUI 应用体系结构的高级视图:

.NET MAUI architecture diagram.

在 .NET MAUI 应用中,你需要编写主要与 .NET MAUI API (1) 交互的代码。 然后,.NET MAUI 直接使用本机平台 API (3)。 此外,应用代码还可以根据需要直接运用平台 API (2)。

.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 和工具。
  • 单一跨平台应用入口点。

.NET MAUI 单一项目是利用多目标方法实现的,并且使用了 SDK 样式项目。 有关 .NET MAUI 单一项目的详细信息,请参阅 .NET MAUI 单一项目

热重载

.NET MAUI 包括对 .NET 热重载的支持,允许在应用运行时修改应用托管的源代码,而无需手动暂停或命中断点。 然后,可以将代码编辑应用于正在运行的应用,而无需重新编译。

.NET MAUI 还包括对 XAML 热重载的支持,允许保存 XAML 文件并查看正在运行的应用中反映的更改,而无需重新编译。 此外,导航状态和数据将会被保留,让你能够快速迭代 UI,而不会丢失已在应用中完成的进度。