什麼是 .NET MAUI?
.NET 多平臺應用程式 UI (.NET MAUI) 是使用 C# 和 XAML 建立原生行動和桌面應用程式的跨平台架構。
使用 .NET MAUI,您可以從單一共享程式代碼基底開發可在 Android、iOS、macOS 和 Windows 上執行的應用程式。
.NET MAUI 是開放原始碼,是 Xamarin.Forms 的演進,從行動裝置延伸至桌面案例,UI 控件會從頭開始重建,以提升效能和擴充性。 如果您先前已使用 Xamarin.Forms 來建置跨平臺使用者介面,您會注意到 .NET MAUI 有許多相似之處。 不過,也有一些差異。 使用 .NET MAUI,您可以使用單一專案建立多平台應用程式,但如有必要,您可以新增平臺特定的原始程式碼和資源。 .NET MAUI 的主要目標是讓您在單一程式代碼基底中盡可能實作應用程式邏輯和 UI 配置。
.NET MAUI 的對象是誰
.NET MAUI 是提供給想要的開發人員的工具:
- 從 Visual Studio 中的單一共享程式碼基底,以 XAML 和 C# 撰寫跨平台應用程式。
- 跨平台共用UI配置和設計。
- 跨平臺共用程式代碼、測試和商業規則。
.NET MAUI 的運作方式
.NET MAUI 將 Android、iOS、macOS 和 Windows API 統一成單一 API,允許開發者一次編寫,隨處運行,同時深入存取每個原生平台的各個層面。
.NET 6 或更新版本提供一系列平臺特定架構來建立應用程式:.NET for Android、適用於 iOS 的 .NET、適用於 Mac Catalyst 的 .NET,以及 Windows UI 3 (WinUI 3) 連結庫。 這些架構都可以存取相同的 .NET 基類庫 (BCL)。 此程式庫會將底層平台的細節從程式碼中抽象化。 BCL 取決於 .NET 運行時間,以提供程式碼的執行環境。 針對 Android、iOS 和 macOS,環境由 Mono 實作,這是 .NET 執行階段的實作。 在 Windows 上,.NET Core Common Language Runtime (CLR) 會提供執行環境。
雖然 BCL 可讓在不同平臺上執行的應用程式共用常見的商業規則,但各種平臺有不同的定義應用程式使用者介面的方式,並提供不同的模型來指定使用者介面的元素如何通訊和互作。 您可以使用適當的平臺特定架構個別製作每個平臺的 UI(適用於 Android、適用於 iOS 的 .NET、適用於 Mac Catalyst 的 .NET 或 WinUI 3),但此方法接著會要求您為每個個別的裝置系列維護程式代碼基底。
.NET MAUI 提供單一架構來建置行動和傳統型應用程式的 UI。 下圖顯示 .NET MAUI 應用程式架構的高階檢視:
在 .NET MAUI 應用程式中,您可以撰寫主要與 .NET MAUI 控制件和 API 層互動的程式代碼(1)。 然後,此層會直接取用原生平臺 API (3)。 此外,應用程式代碼可能在必要時直接使用平台 API(2)。
.NET MAUI 應用程式可以在 PC 或 Mac 上撰寫,並編譯成原生應用程式套件:
- 使用 .NET MAUI 從 C# 編譯而成的 Android 應用程式,會先轉譯為中繼語言(IL),然後在應用程式啟動時,透過即時編譯(JIT)轉譯為原生組件。
- 使用 .NET MAUI 建置的 iOS 應用程式是將 C# 提前 (AOT) 編譯成原生 ARM 組合語言代碼的。
- 使用 .NET MAUI 建置的 macOS 應用程式會使用 Mac Catalyst,這是 Apple 的解決方案,可將以 UIKit 建置的 iOS 應用程式帶入桌面,並視需要使用額外的 AppKit 和平臺 API 加以增強。
- 使用 .NET MAUI 建置的 Windows 應用程式會使用 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 用來存取裝置功能的功能範例包括:
- 存取感測器,例如裝置上的加速計、指南針和陀螺儀。
- 能夠檢查裝置的網路連線狀態,並偵測變更。
- 提供應用程式執行裝置的相關信息。
- 在應用程式之間,將文字複製並貼到系統剪貼簿。
- 從裝置挑選單一或多個檔案。
- 將數據安全地儲存為索引鍵/值組。
- 利用內建的文字到語音轉換引擎,從裝置讀取文字。
- 起始瀏覽器型驗證流程,以接聽特定應用程式註冊 URL 的回呼。
單一專案
.NET MAUI 單一專案會採用您在開發應用程式時通常遇到的平臺特定開發體驗,並將其抽象化成以 Android、iOS、macOS 和 Windows 為目標的單一共享專案。
不論目標平台為何,.NET MAUI 單一專案都提供簡化且一致的跨平臺開發體驗。 .NET MAUI 單一專案提供下列功能:
- 以 Android、iOS、macOS 和 Windows 為目標的單一共享專案。
- 執行您的 .NET MAUI 應用程式時的簡化除錯目標選擇。
- 單一專案中的共享資源檔。
- 單一應用程式指令清單,指定應用程式標題、標識碼和版本。
- 視需要存取平臺特定的 API 和工具。
- 單一跨平臺應用程式進入點。
.NET MAUI 單一專案是透過多重目標和使用 SDK 樣式專案來啟用的。 如需 .NET MAUI 單一項目的詳細資訊,請參閱 .NET MAUI 單一項目。
熱重載
.NET MAUI 包含 .NET 熱重載的支援,可讓您在應用程式執行時修改受控原始程式碼,而不需要手動暫停或叫用斷點。 然後,您的程式代碼編輯可以套用至執行中的應用程式,而不需重新編譯。
.NET MAUI 也包含 XAML 熱重載的支援,可讓您儲存 XAML 檔案,並在不重新編譯的情況下查看反映在執行中應用程式中的變更。 此外,您的導航狀態和數據將會維持,讓您能快速迭代 UI,而不會在應用程式中迷失方向。