什么是 .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 或更高版本提供了一系列特定于平台的框架,用于创建应用:适用于 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 应用中,编写主要与 .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 文件,并查看正在运行的应用中反映的更改,而无需重新编译。 此外,导航状态和数据将被保留,使你能够在用户界面上快速进行迭代,而不会丢失在应用中的位置。