前言
在2020年5月, 微軟宣布了MAUI跨平臺框架, MAUI 是Xamarin.Forms演變而來, 這也就意味著, 如果你原來具備Xamarin.Forms開發經驗, 你可以流暢的過渡到MAUI開發當中。
原本于2021年底發布的MAUI正式版被推遲到了2022年5月底發布。現在, 你目前可以通過安裝VS2022 預覽版進行安裝MAUI開發選項。此版本中, 將不會存在Xamarin.Forms項目模板。
MAUI新特性一覽
單個代碼庫支持多個平臺
完整的熱重載功能 (.NET/XAML)
原生平臺UI
支持完整的自繪
多窗口模式
集成跨平臺本機API
支持.NET6/C#10新特性
Xamarin.Forms VS MAUI
平臺架構
首先,平臺架構的主要變化是.NET MAUI與.NET 6.0集成.
Xamarin.Forms | .NET MAUI |
---|---|
![]() | ![]() |
項目結構
Xamarin.Forms和.NET MAUI之間的主要區別在于它們的項目結構。
Xamarin.Forms | MAUI |
---|---|
每個平臺維護一個單獨的項目 | 一個項目支持多個平臺 |
平臺相關的代碼在不同項目中單獨維護 | 在Platforms文件夾中維護 |
使用Xamarin.Forms,開發人員可能會在處理針對多個平臺的多個項目時感到繁瑣。圖像,字體和平臺相關代碼的維護;添加不同的依賴項,并在它們被引用為 NuGet 包時解析它們。遇到這些問題后,開發人員現在可以在 .NET MAUI 中通過單個項目得到解決。
由于 .NET MAUI 是一個簡單的項目應用,因此它可以在基于多目標的結構上運行。.NET MAUI 應用包含一個 “Platforms” 文件夾,其子文件夾表示 Android、iOS Maccatalyst 和 Windows 等平臺,以定位在平臺上啟動應用的特定于平臺的代碼。它也可以根據您自己的文件名進行多目標。
支持的平臺和版本
Xamarin和.NET MAUI之間平臺支持的主要區別在于它們對Windows的支持。Xamarin 支持 UWP,而 .NET MAUI 支持 WinUI。有關支持版本的詳細信息,請查看下表。
Xamarin.Forms | MAUI |
---|---|
- Android 4.4 (API 19) 或更高版本 - iOS 9 或更高版本 - UWP:Windows 10,內部版本 10.0.16299.0 或更高版本,用于 .NET Standard 2.0 支持 | - Android 5.0 (API 21) 或更高版本。 - iOS 10 或更高版本。 - macOS 10.13 或更高版本 - WinUI:Windows 11 和 Windows 10 版本 1809 或更高版本 |
其他平臺支持: Tizen macOS 10.13 或更高版本 GTK# WPF | 其他平臺支持: Tizen,由三星支持。 Linux,由社區支持。 |
.NET CLI
.NET 命令行界面 (CLI) 是一個跨平臺工具鏈,用于開發、構建、運行和發布 .NET 應用程序。此 .NET CLI 為 .NET MAUI 應用程序提供了無縫的構建和運行體驗。
Xamarin.Forms | .NET MAUI |
---|---|
Xamarin 支持 .NET Framework 來構建和運行應用。 | .NET MAUI 支持 .NET CLI 工具鏈來構建、運行和發布 .NET 應用程序。 |
渲染器和處理程序架構
在 Xamarin 中,控件是使用呈現器創建的。當開發人員想要自定義本機控件的 UI 時,他們必須使用自定義呈現器來執行此操作。這些渲染器在性能和應用大小方面花費了大量用戶。
但是 .NET MAUI 使用的處理程序體系結構與本機程序集非常松散地耦合。借助本機平臺,這會產生具有更好性能的輕量級應用程序。
如果需要,可以在此處使用渲染器。移植時,可以重用 Xamarin.Forms 自定義呈現器。
Xamarin.Forms | .NET MAUI |
---|---|
使用呈現器體系結構。 | 使用處理程序體系結構。 |
與本機控件緊密耦合。 | 與本機控件松散耦合。 |
不能在使用處理程序。 | 如果需要,可以在此處使用渲染器。移植時,可以重用 Xamarin.Forms 自定義呈現器。 |
![]() | ![]() |
.NET 6
.NET MAUI 已集成到 .NET 6 中,而 Xamarin.Forms 是一個 .NET Framework。由于 .NET 6 集成,您可以在 .NET MAUI 中使用以下 .NET 6 和 C#10 功能。
資源管理
.NET MAUI在資源方面接管了Xamarin,特別是在圖像方面。您無需維護一組映像即可滿足特定于平臺或設備的需求。單個 SVG 圖像足以滿足所有平臺和設備要求。SVG圖像被轉換為.png圖像,以便在所有平臺上工作。
Xamarin.Forms | .NET MAUI |
---|---|
資源包括圖像和類。 | 資源包括MauiImage和MauiResources等類。 |
需要為特定于平臺的設備維護基于分辨率的圖像。 | 借助 SVG 圖像,無需維護特定于平臺或特定于設備的圖像。 |
需要為每個平臺單獨維護資源文件。 | 資源可以在單個位置進行維護。 |
熱重載支持
Xamarin.Forms | .NET MAUI |
---|---|
.NET熱重載: 不支持(但 UWP 對使用 的運行時編輯的支持有限)。 NET 的編輯和繼續功能)。 | .NET熱重載: 提供完整的 .NET 熱重載支持。 |
XAML熱重載: 實驗的:SDK 4.x 和 Visual Studio 2019 版本 16.9 之前的版本。 功能完成:SDK 5.x 和 Visual Studio 2019 版本 16.9 或更高版本。 | XAML熱重載: 提供完整的支持。 |
圖形繪制
在 Xamarin 中,沒有可用于滿足任何繪圖要求的直接 API。您必須使用渲染器在本機端執行此操作。但.NET MAUI現在抽象化了本機繪圖,并為您帶來了更好的圖形 API。.NET MAUI中的跨平臺圖形功能提供了用于繪制和繪制形狀的繪圖畫布。畫筆是主要類型。
Xamarin.Forms | .NET MAUI |
---|---|
沒有可用的圖形。 | 圖形模式,如繪畫,混合可用。 |
無法自定義繪圖。 | 支持繪制圖形 |
顏色 | 畫筆 |
配置資源和服務
與 Xamarin 不同,.NET MAUI 應用是使用 .NET 通用主機引導的。因此,如果要初始化任何字體,服務或第三方組件,則可以從單個位置完成。
public static MauiApp CreateMauiApp(){var builder = MauiApp.CreateBuilder();builder.UseMauiApp<App>().ConfigureFonts(fonts =>{fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");});return builder.Build();}
可訪問性
通常在 Xamarin 中,我們使用自動化屬性和本機 API 為屏幕閱讀器提供對應用中所用控件中文本的適當輔助功能。
Xamarin.Forms 輔助功能
但 .NET MAUI 提供語義屬性以在應用中提供輔助功能值(您可以在 .NET MAUI 中使用自動化屬性,但推薦的方法是語義屬性)。、
MAUI 可訪問性
Blazor應用程序
在 Xamarin 中無法開發 Blazor 混合應用,但你可以生成 .NET MAUI Blazor 應用。
跨平臺API
Xamarin.Forms | .NET MAUI |
---|---|
可以使用 Xamarin.Essentials 執行設備功能的跨平臺 API。 | 設備功能的跨平臺 API 也與 Microsoft.Maui.Essentials 命名空間下的 MAUI 集成。 |
多窗口
在.NET MAUI中,可以一次在Android,iPad上的iOS,Mac Catalyst和Windows上打開多個窗口。此支持在 Xamarin 中不可用。