什麼是 .NET MAUI?

.NET 多平台應用程式 UI (.NET MAUI) 是一種跨平台架構,可使用 C# 和 XAML 建立原生行動和傳統型應用程式。

.NET MAUI 可讓您從單一共用程式碼基底,開發可在 Android、iOS、macOS 和 Windows 上執行的應用程式。

.NET MAUI supported platforms.

.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 Android、.NET iOS、.NET macOS 和 Windows UI 3 (WinUI 3) 連結庫。 這些架構都可以存取相同的 .NET 基類庫 (BCL)。 此連結庫會將基礎平臺的詳細數據從程式碼中抽象化。 BCL 取決於 .NET 執行階段,以提供程式碼的執行環境。 針對 Android、iOS 和 macOS,環境是由 Mono 實作,這是 .NET 運行時間的實作。 在 Windows 上,.NET CoreCLR 提供執行環境。

雖然 BCL 可讓在不同平臺上執行的應用程式共用常見的商業規則,但各種平臺有不同的定義應用程式使用者介面的方式,並提供不同的模型來指定使用者介面的元素如何通訊和互操作。 您可以使用適當的平臺特定架構個別製作每個平臺的 UI(.NET Android、.NET iOS、.NET macOS 或 WinUI 3),但此方法接著會要求您為每個個別的裝置系列維護程式代碼基底。

.NET MAUI 提供單一架構來建置行動和傳統型應用程式的 UI。 下圖顯示 .NET MAUI 應用程式架構的高階檢視:

.NET MAUI architecture diagram.

在 .NET MAUI 應用程式中,您可以撰寫主要與 .NET MAUI API 互動的程式代碼 (1)。 .NET MAUI 接著會直接取用原生平臺 API (3)。 此外,應用程式程式代碼可能視需要直接練習平臺 API(2)。

.NET MAUI 應用程式可以在 PC 或 Mac 上撰寫,並編譯成原生應用程式套件:

  • 使用 .NET MAUI 從 C# 編譯為中繼語言 (IL) 所建置的 Android 應用程式,然後在應用程式啟動時編譯為原生元件。
  • 使用 .NET MAUI 建置的 iOS 應用程式完全是從 C# 編譯成原生 ARM 元件程式碼的預先 (AOT)。
  • 使用 .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,而不會遺失應用程式中的位置。