乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 - 微软跨平台UI框架.NET MAUI,基于.NET 6构建的通用框架
什么是.NET MAUI
https://dotnet.microsoft.com/zh-cn/apps/maui
.NET Multi-platform App UI (.NET MAUI)是一个框架,用于在单个代码库中使用C#和XAML构建新式、多平台、本机编译的iOS、Android、macOS和Windows应用。
.NET MAUI使用最新的新式技术在Android、iOS、macOS和Windows上构建本机应用,将它们抽象为基于.NET 6构建的通用框架。
默认情况下,本机应用的外观与它们所属的操作系统类似,并且布局自动完全适应每个设备,无需额外代码。
平台API可直接从C#获得,以从单个跨平台API访问60多个平台功能,包括访问隔离存储、传感器、地理位置、相机等内容,但不会受到任何影响。
历史
- 在2020年5月, 微软宣布了MAUI跨平台框架, MAUI是Xamarin.Forms演变而来, 这也就意味着, 如果你原来具备Xamarin.Forms开发经验, 你可以流畅的过渡到MAUI开发当中。
- 原本于2021年底发布的MAUI正式版被推迟到了2022年5月底发布。现在, 你目前可以通过安装VS2022 预览版进行安装MAUI开发选项。 此版本中, 将不会存在Xamarin.Forms项目模板。
特性
- 单个代码库支持多个平台
- 完整的热重载功能 (.NET/XAML)
- 原生平台UI
- 支持完整的自绘
- 多窗口模式
- 集成跨平台本机API
- 支持.NET6/C#10新特性
对比Xamarin.Forms
平台架构
.NET MAUI与.NET 6.0集成。
Xamarin.Forms | MAUI |
---|---|
项目结构
使用Xamarin.Forms,开发人员可能会在处理针对多个平台的多个项目时感到繁琐。图像,字体和平台相关代码的维护; 添加不同的依赖项,并在它们被引用为NuGet包时解析它们。遇到这些问题后,开发人员现在可以在.NET MAUI中通过单个项目得到解决。
由于.NET MAUI是一个简单的项目应用,因此它可以在基于多目标的结构上运行。.NET MAUI应用包含一个"Platforms"文件夹,其子文件夹表示Android、iOS Maccatalyst和Windows等平台,以定位在平台上启动应用的特定于平台的代码。它也可以根据您自己的文件名进行多目标。
Xamarin.Forms | MAUI |
---|---|
每个平台维护一个单独的项目 | 一个项目支持多个平台 |
平台相关的代码在不同项目中单独维护 | 在Platforms文件夹中维护 |
受支持的平台
Xamarin和.NET MAUI之间平台支持的主要区别在于它们对Windows的支持。Xamarin支持UWP,而.NET MAUI支持WinUI。
Xamarin.Forms | MAUI |
---|---|
Android 4.4(API19)或更高版本 | Android 5.0(API 21)或更高版本 |
iOS 9或更高版本 | iOS 10或更高版本 |
UWP:Windows 10,内部版本10.0.16299.0或更高版本,用于.NET Standard 2.0支持 | 使用WindowsUI库(WinUI)3 Windows 11和Windows 10版本1809或更高版本 |
使用Mac Catalyst macOS 10.13或更高版本 | |
其他平台支持:Tizen、macOS 10.13或更高版本、GTK#、WPF | 其他平台支持:Tizen由三星支持;Linux由社区支持。 |
.NET CLI
.NET命令行界面(CLI)是一个跨平台工具链,用于开发、构建、运行和发布.NET应用程序。此.NET CLI为.NET MAUI应用程序提供了无缝的构建和运行体验。
Xamarin.Forms | MAUI |
---|---|
Xamarin支持.NET Framework来构建和运行应用 | .NET MAUI支持.NET CLI工具链来构建、运行和发布.NET应用程序。 |
渲染器和处理程序架构
在Xamarin中,控件是使用呈现器创建的。当开发人员想要自定义本机控件的UI时,他们必须使用自定义呈现器来执行此操作。这些渲染器在性能和应用大小方面花费了大量用户。
但是.NET MAUI使用的处理程序体系结构与本机程序集非常松散地耦合。借助本机平台,这会产生具有更好性能的轻量级应用程序。
如果需要,可以在此处使用渲染器。移植时,可以重用Xamarin.Forms自定义呈现器。
Xamarin.Forms | MAUI |
---|---|
使用呈现器体系结构 | 使用处理程序体系结构 |
与本机控件紧密耦合 | 与本机控件松散耦合 |
不能在使用处理程序 | 如果需要,可以在此处使用渲染器。移植时,可以重用Xamarin.Forms自定义呈现器。 |
.NET 6和C# 10
.NET MAUI已集成到.NET 6中,而Xamarin.Forms是一个.NET Framework。由于.NET 6集成,您可以在.NET MAUI中使用以下.NET 6和C# 10功能。
资源管理
.NET MAUI在资源方面接管了Xamarin,特别是在图像方面。您无需维护一组映像即可满足特定于平台或设备的需求。单个SVG图像足以满足所有平台和设备要求。SVG图像被转换为.png图像,以便在所有平台上工作。
Xamarin.Forms | MAUI |
---|---|
资源包括图像和类 | 资源包括MauiImage和MauiResources等类 |
需要为特定于平台的设备维护基于分辨率的图像 | 借助SVG图像,无需维护特定于平台或特定于设备的图像 |
需要为每个平台单独维护资源文件 | 资源可以在单个位置进行维护 |
热重载支持
MAUI支持.NET热重载和XAML热重载。
Xamarin.Forms | MAUI |
---|---|
.NET热重载: 不支持NET的编辑和继续功能(但UWP对使用的运行时编辑的支持有限) | .NET热重载: 提供完整的.NET热重载支持 |
XAML热重载: 功能完成:SDK 5.x和Visual Studio 2019版本16.9或更高版本 | XAML热重载: 提供完整的支持 |
图形绘制
在Xamarin中,没有可用于满足任何绘图要求的直接API。您必须使用渲染器在本机端执行此操作。但.NET MAUI现在抽象化了本机绘图,并为您带来了更好的图形API。.NET MAUI中的跨平台图形功能提供了用于绘制和绘制形状的绘图画布。画笔是主要类型。
Xamarin.Forms | MAUI |
---|---|
没有可用的图形 | 图形模式,如绘画,混合可用 |
无法自定义绘图 | 支持绘制图形 |
颜色 | 画笔 |
资源和服务
与Xamarin不同,.NET MAUI应用是使用.NET通用主机引导的。因此,如果要初始化任何字体,服务或第三方组件,则可以从单个位置完成。
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp().ConfigureFonts
(
fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
}
);
return builder.Build();
}
可访问性
通常在Xamarin中,我们使用自动化属性和本机API为屏幕阅读器提供对应用中所用控件中文本的适当辅助功能。
但.NET MAUI提供语义属性以在应用中提供辅助功能值(您可以在.NET MAUI中使用自动化属性,但推荐的方法是语义属性)。
Blazor应用程序
在Xamarin中无法开发Blazor混合应用,但你可以生成.NET MAUI Blazor应用。
跨平台API
Xamarin.Forms | MAUI |
---|---|
可以使用Xamarin.Essentials执行设备功能的跨平台API | 设备功能的跨平台API也与Microsoft.Maui.Essentials命名空间下的MAUI集成 |
多窗口
在.NET MAUI中,可以一次在Android,iPad上的iOS,Mac Catalyst和Windows上打开多个窗口。此支持在Xamarin中不可用。
初识MAUI
通过Visual Studio 2022预览版安装
- VisualStudioSetup.exe
在预览版的安装界面,我们会看到在"桌面应用和移动应用"分类中新增了一项".NET Multi-platform App UI开发",我们勾选它。
通过MAUI项目模板创建项目
在Visual Studio 2022创建项目时,选择C#语言,所有平台,类型选MAUI
创建示例项目
框架这次比较简单,从.NET 6.0开始,目前也只有.NET 6.0,哈哈。
创建后,就是一个单项目
编译运行首个项目
第一次运行,总会碰壁,首先就是要打开Windows 11的开发人员模式
第二次运行,可能还有一个报错,那就是要求接受Android SDK的许可证
直接双击这条消息,在弹出的许可协议对话框中点击接受按钮
愉快的跑起来了
看看项目结构
熟悉MAUI项目结构
其中:
Platforms
: 包含MAUI项目支持的所有平台。Resources
: 项目中所用到的资源文件。如:图像、样式文件。App.xaml
: 跨平台移动应用程序的类。AppShell/MainPage
: 默认模板项目Shell导航窗口。MauiProgram
: 创建应用程序主机,初始化启动容器、服务以及构建。
启动MAUI项目
选择一个目标运行的平台, 启动项目。
如果选的是Android模拟器,那么它会要求先创建一个模拟器
参考
- .NET Multi-Platform App UI-从单个 C# 代码库生成本机、跨平台桌面和移动应用
- 什么是.NET MAUI?
- .NET MAUI应用支持的平台