什麼是.NET 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<App>().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預覽版安裝
在預覽版的安裝界面,我們會看到在"桌面應用和移動應用"分類中新增了一項".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模擬器,那麼它會要求先創建一個模擬器