.NET MAUI(多平臺(tái)應(yīng)用程序 UI)由 Microsoft 開發(fā),是一個(gè)開源框架,用于為多個(gè)平臺(tái)構(gòu)建本機(jī)移動(dòng)和桌面應(yīng)用程序,包括 Android、iOS、macOS、Windows 等,并且也使用單一代碼庫。與 Xamarin 表單不同,開發(fā)人員必須為每個(gè)目標(biāo)平臺(tái)維護(hù)單獨(dú)的代碼庫。
.NET Framework 概述
如果您知道.NET 框架是什么以及它是如何工作的,那么您可以跳過本節(jié)并跳轉(zhuǎn)到“它是如何工作的”。
.NET Framework 是 Microsoft 創(chuàng)建的軟件開發(fā)平臺(tái)。它提供了一個(gè)全面且一致的編程模型,用于跨各種 Microsoft Windows 平臺(tái)(包括桌面、Web 和移動(dòng)設(shè)備)構(gòu)建和運(yùn)行應(yīng)用程序。
以下是 .NET Framework 的一些主要功能和組件:
公共語言運(yùn)行時(shí) (CLR): CLR 是 .NET Framework 的基礎(chǔ)。它提供內(nèi)存管理、垃圾收集和異常處理等核心服務(wù)。它還支持語言互操作性,允許在同一應(yīng)用程序中一起使用多種編程語言。
基類庫 (BCL): BCL 是預(yù)構(gòu)建的類、類型和 API 的集合,為開發(fā)人員提供了廣泛的功能。它包括文件 I/O、網(wǎng)絡(luò)、數(shù)據(jù)訪問、加密、線程等類。BCL 提供可重復(fù)使用的組件,可簡化應(yīng)用程序開發(fā)。
語言支持: .NET Framework 支持多種編程語言,包括 C#、Visual Basic .NET (VB.NET) 和 F#。開發(fā)人員可以選擇自己喜歡的語言來編寫代碼,并利用每種語言可用的豐富工具和庫。
框架類庫 (FCL): FCL 是構(gòu)建在 BCL 之上的庫和框架的集合。它為特定類型的應(yīng)用程序提供附加功能,例如用于桌面應(yīng)用程序的 Windows Presentation Foundation (WPF)、用于 Web 開發(fā)的 ASP.NET 以及用于構(gòu)建面向服務(wù)的應(yīng)用程序的 Windows Communication Foundation (WCF)。
部署和執(zhí)行: .NET Framework 應(yīng)用程序通常部署為已編譯的程序集(.exe 或 .dll 文件)以及任何所需的依賴項(xiàng)。在運(yùn)行時(shí),程序集由 CLR 執(zhí)行,CLR 即時(shí) (JIT) 將 IL(中間語言)代碼編譯為本機(jī)機(jī)器指令。
.NET MAUI 的工作原理
編寫 .NET MAUI 代碼(主要是 C#)后,將發(fā)生以下步驟:
構(gòu)建應(yīng)用程序
代碼(包括對(duì) BCL 類的引用)是使用 .NET 構(gòu)建工具或集成開發(fā)環(huán)境 (IDE)(如Visual Studio) .
在構(gòu)建過程中,C# 代碼會(huì)轉(zhuǎn)換為中間語言 (IL) 或通用中間語言 (CIL)。該 IL 與平臺(tái)無關(guān),可以在具有兼容 .NET 運(yùn)行時(shí)的任何平臺(tái)上運(yùn)行。
我們還可以安裝并啟用提前編譯(AOT)。如果啟用此功能,則將跳過下面的步驟 2 和 3,并且 .NET MAUI 將從 IL 生成目標(biāo)環(huán)境的本機(jī)代碼。
當(dāng) AOT 激活時(shí),Mono 運(yùn)行時(shí)用于將 .NET MAUI 代碼轉(zhuǎn)換為 iOS 和 Android 平臺(tái)的本機(jī)代碼,而 .NET CLR 用于 Windows 來實(shí)現(xiàn)相同的轉(zhuǎn)換。
特定于平臺(tái)的編譯
然后,IL 代碼以及引用的 BCL 程序集被編譯為每個(gè)目標(biāo)平臺(tái)的特定于平臺(tái)的二進(jìn)制文件。
對(duì)于 Android,.NET MAUI 工具將 IL 代碼和 XAML 以及任何必要的 .NET 庫打包到 Android 包 (APK) 中。這是一個(gè)用于分發(fā) Android 應(yīng)用程序的存檔文件。
對(duì)于 iOS,Apple 不允許 JIT 在 iOS 設(shè)備上運(yùn)行。因此,您將無法在 iOS 上運(yùn)行您的應(yīng)用程序。對(duì)于Apple,請(qǐng)使用提前編譯。
對(duì)于 Windows,IL 代碼可以在運(yùn)行時(shí)進(jìn)行即時(shí) (JIT) 編譯,也可以使用 Windows UI 3 (WinUI 3) 庫使用 .NET 本機(jī)編譯器提前 (AOT) 編譯為本機(jī)指令。
注意: Android 工具鏈(.NET for Android)和 Windows UI 3 (WinUI 3) 庫是 .NET 框架(6 或更高版本)的一部分。
執(zhí)行以及與 BCL 的交互
已編譯的應(yīng)用程序以及所需的 BCL 程序集將在相應(yīng)的目標(biāo)平臺(tái)上部署和執(zhí)行。
當(dāng)應(yīng)用程序在 Android 設(shè)備上啟動(dòng)時(shí),.NET MAUI 運(yùn)行時(shí)會(huì)將 IL 代碼即時(shí) (JIT) 編譯為可以執(zhí)行的本機(jī)機(jī)器代碼。
在運(yùn)行時(shí),應(yīng)用程序可以與 BCL 類和 API 進(jìn)行交互,利用它們的功能來執(zhí)行各種任務(wù)。
例如,如果您的應(yīng)用程序需要讀取文件,您可以利用“System.IO.File”等 BCL 類來訪問文件 I/O 操作。
同樣,如果您的應(yīng)用程序需要網(wǎng)絡(luò)功能,您可以使用 BCL 提供的“System.Net”命名空間中的類來處理網(wǎng)絡(luò)任務(wù)。
.NET MAUI 渲染引擎使用 XAML 標(biāo)記為 Android 平臺(tái)構(gòu)建本機(jī)用戶界面。
在特定于平臺(tái)的編譯過程中,代碼中指定的任何特定于平臺(tái)的資源和資產(chǎn)(例如圖像、布局和配置文件)也包含在輸出中。此外,必要的特定于平臺(tái)的運(yùn)行時(shí)庫和依賴項(xiàng)與應(yīng)用程序捆綁在一起,以確保它在每個(gè)目標(biāo)平臺(tái)上正確運(yùn)行。
下圖說明了前面提到的步驟:
圖表是使用 Draw.io 準(zhǔn)備的
安裝和設(shè)置
我們可以使用 Visual Studio Community 版本創(chuàng)建 .NET MAUI 項(xiàng)目。從此處(https://visualstudio.microsoft.com/vs/community/)下載相同的內(nèi)容。請(qǐng)注意,我們必須安裝 2022 才能使用 .NET MAUI。該鏈接將下載 Visual Studio 安裝程序。雙擊該文件運(yùn)行程序,在“桌面和移動(dòng)”選項(xiàng)下選擇“.NET Multi-platform UI App”(如下圖紅框所示)。
這將開始下載和安裝構(gòu)建移動(dòng)應(yīng)用程序所需的所有工具。設(shè)置完成后,您就可以開發(fā)移動(dòng)應(yīng)用程序了。這不是那么容易嗎?打開Visual Studio社區(qū)版并單擊“創(chuàng)建新項(xiàng)目”鏈接,如下所示:
將項(xiàng)目和解決方案名稱命名為“MauiApp1”。
.NET MAUI 應(yīng)用程序的項(xiàng)目結(jié)構(gòu)
應(yīng)用程序的典型結(jié)構(gòu)如下所示:
讓我們討論每個(gè)文件夾及其內(nèi)容。
依賴項(xiàng):此文件夾包含運(yùn)行和開發(fā)應(yīng)用程序所需的所有必需的 SDK、NuGet 包、庫和組件。
屬性:它僅包含一個(gè)文件“l(fā)aunchSettings.json”,用于啟動(dòng)和調(diào)試應(yīng)用程序。一般用于添加環(huán)境變量、參數(shù)等。見下面的例子:
該應(yīng)用程序已配置為在端口 80 上的瀏覽器上運(yùn)行,環(huán)境變量“ASPNETCORE_ENVIRONMENT”的值為“Development”。當(dāng)我們運(yùn)行應(yīng)用程序時(shí),將使用帶有參數(shù)“run”的命令“dotnet”。請(qǐng)注意,該文件最初可能非常簡單。但是,隨著開發(fā)的進(jìn)展,我們必須經(jīng)常更新文件以更改/添加配置值。
平臺(tái)
此文件夾包含每個(gè)環(huán)境的子文件夾。在這些子文件夾中,我們有特定于平臺(tái)的代碼、資源、依賴項(xiàng)和配置。這種分離允許開發(fā)人員在不同平臺(tái)上自定義應(yīng)用程序的行為和外觀,同時(shí)維護(hù)通用功能的共享代碼庫。
常見用法可以包括條件編譯以排除或包含特定代碼段、基于平臺(tái)的性能優(yōu)化配置以及特定于平臺(tái)的測(cè)試配置。
資源
該文件夾包含各種非代碼資源,例如圖像、圖標(biāo)、樣式和本地化文件。請(qǐng)注意,存儲(chǔ)在這些文件夾中的資源與平臺(tái)無關(guān)。這意味著相同的資源可以在不同的目標(biāo)平臺(tái)(iOS、Android、Windows)上使用,而無需復(fù)制文件或編寫特定于平臺(tái)的代碼。
現(xiàn)在讓我們看看這些獨(dú)立的根級(jí)文件的用途:
App.xaml:此文件充當(dāng)定義適用于整個(gè)應(yīng)用程序的共享資源、配置和行為的中心位置。它有助于確保一致性,簡化初始化和清理,并允許您有效地處理重要的生命周期事件。
AppShell.xaml:此文件用于定義應(yīng)用程序的導(dǎo)航。Shell 元素中子元素的順序決定了頁面的顯示順序。
MainPage.xaml:此文件充當(dāng)應(yīng)用程序初始用戶界面的畫布,并提供導(dǎo)航和用戶交互的起點(diǎn)。您可以在這里為應(yīng)用程序的用戶體驗(yàn)定下基調(diào),并定義用戶啟動(dòng)應(yīng)用程序時(shí)的第一印象。例如,它可以包含 StackLayout、Grid 或relativelayout 等容器來排列各種 UI 元素,例如按鈕、標(biāo)簽、圖像和其他控件。
MauiProgram.cs:該文件包含主類“MauiProgram”,它作為應(yīng)用程序的啟動(dòng),用于配置字體、服務(wù)和其他第三方庫。
總結(jié)
從本質(zhì)上講,.NET MAUI 使開發(fā)人員能夠創(chuàng)建針對(duì)多個(gè)平臺(tái)的多功能、高效且令人驚嘆的應(yīng)用程序,而不會(huì)影響本機(jī)性能。其項(xiàng)目結(jié)構(gòu)、渲染引擎以及與 .NET 生態(tài)系統(tǒng)的無縫集成為跨平臺(tái)開發(fā)的新時(shí)代奠定了基礎(chǔ),邀請(qǐng)開發(fā)人員制作讓不同設(shè)備和操作系統(tǒng)的用戶滿意的應(yīng)用程序。隨著技術(shù)格局的不斷發(fā)展,.NET MAUI 成為現(xiàn)代開發(fā)人員工具包中不可或缺的工具,彌合了平臺(tái)多樣性和代碼簡單性之間的差距。文章來源:http://www.zghlxwxcb.cn/article/422.html
文章來源地址http://www.zghlxwxcb.cn/article/422.html
到此這篇關(guān)于一次編碼,無處不在:深入探討 .NET MAUI 的跨平臺(tái)魔力的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!