什么是 .NET MAUI?

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

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

.NET MAUI 支持的平台。

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

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

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

.NET MAUI 体系结构示意图。

在 .NET MAUI 应用中,你编写主要与 .NET MAUI 控件和 API 层 (1) 交互的代码。 然后,此层直接使用原生平台 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,而不会丢失已在应用中完成的进度。