什么是 .NET MAUI?

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

重要

虽然已发布 .NET 多平台应用 UI (.NET MAUI) ,但目前预览版支持 .NET MAUI Visual Studio。 此内容与发布前可能进行实质性修改的预发布产品相关。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。

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

.NET MAUI supported platforms.

.NET MAUI 是开源的,是 Xamarin.Forms 的演变,从移动方案扩展到桌面方案,UI 控件从头开始重新生成,以便实现性能和扩展性。 如果以前使用 Xamarin.Forms 生成跨平台用户界面,你会注意到与 .NET MAUI 有许多相似之处。 但也有一些差异。 使用 .NET MAUI,可以使用单个项目创建多平台应用,但如有必要,可以添加特定于平台的源代码和资源。 .NET MAUI 的主要目标是在单个代码库中尽可能多地实现应用逻辑和 UI 布局。

Who .NET MAUI 适用于

.NET MAUI 适用于想要:

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

.NET MAUI 的工作原理

.NET MAUI 将Android、iOS、macOS和Windows API 统一到单个 API 中,该 API 允许在任意位置运行一次开发人员体验,同时提供对每个本机平台的各个方面的深入访问。

.NET 6 提供了一系列特定于平台的框架来创建应用:用于Android的 .NET、用于iOS的 .NET、用于macOS的 .NET,以及 Windows UI 3 (WinUI 3) 库。 这些框架都有权访问同一个 .NET 6 基类库 (BCL) 。 此库将基础平台的详细信息从代码中抽象化。 BCL 依赖于 .NET 运行时来为代码提供执行环境。 对于 Android、iOS 和 macOS,环境由 .NET 运行时的实现 Mono 实现。 在Windows,Win32 提供执行环境。

虽然 BCL 使在不同平台上运行的应用能够共享常见的业务逻辑,但各种平台有不同的定义应用的用户界面的方式,并且它们提供了不同的模型来指定用户界面元素的通信和互操作方式。 可以使用适用于Android的相应特定于平台的框架 (.NET、用于iOS的 .NET、用于 macOS 的 .NET 或 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 上编写,并编译为本机应用包:

  • Android使用 .NET MAUI 编译的应用从 C# 编译为中间语言 (IL) ,然后在应用启动时 (JIT) 编译为本机程序集。
  • iOS使用 .NET MAUI 生成的应用完全提前 (从 C# 编译为本机 ARM 程序集代码的 AOT) 。
  • macOS使用 .NET MAUI 生成的应用使用 Mac Catalyst(Apple 提供的一种解决方案),可将使用 UIKit 生成的iOS应用引入桌面,并根据需要使用其他 AppKit 和平台 API 对其进行扩充。
  • Windows使用 .NET MAUI 生成的应用使用 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 提供的功能示例包括:

  • 访问设备上的传感器,例如加速计、指南针和陀螺仪。
  • 能够检查设备的网络连接状态并检测更改。
  • 提供有关应用正在运行的设备的信息。
  • 在应用之间将文本复制并粘贴到系统剪贴板。
  • 从设备中选择一个或多个文件。
  • 以键/值对的形式安全地Microsoft Store数据。
  • 利用内置文本转语音引擎从设备读取文本。
  • 启动基于浏览器的身份验证流,该流侦听特定应用注册的 URL 的回调。

单个项目

.NET MAUI 单一项目采用开发应用时通常遇到的特定于平台的开发体验,并将这些体验抽象化为面向Android、iOS、macOS和Windows的单个共享项目。

无论面向的平台如何,.NET MAUI 单一项目都提供简化且一致的跨平台开发体验。 .NET MAUI 单一项目提供以下功能:

  • 一个可面向Android、iOS、macOS和Windows的共享项目。
  • 用于运行 .NET MAUI 应用的简化调试目标选择。
  • 单个项目中的共享资源文件。
  • 一个应用清单,指定应用标题、ID 和版本。
  • 根据需要访问特定于平台的 API 和工具。
  • 单个跨平台应用入口点。

使用多目标启用 .NET MAUI 单一项目,并在 .NET 6 中使用 SDK 样式项目。 有关 .NET MAUI 单一项目的详细信息,请参阅 .NET MAUI 单一项目

热重载

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

.NET MAUI 包括对 XAML 热重载的支持,使你能够保存 XAML 文件,并查看在正在运行的应用中反映的更改,而无需重新编译。 此外,将维护导航状态和数据,使你能够在 UI 上快速循环访问,而不会丢失应用中的位置。