適用於 .NET 8 的 .NET MAUI 新功能

.NET MAUI 在 .NET 8 中的重點在於品質。 在 .NET 8 中,已合併 1618 個提取要求,已關閉 689 個問題。 其中包括來自 .NET MAUI 小組以及 .NET MAUI 社群的變更。 這些變更應該會導致 .NET 8 的品質大幅增加。

重要

由於使用基礎外部相依性,例如 Xcode 或 Android SDK 工具,所以 .NET 多平臺應用程式 UI (.NET MAUI) 支援原則與 .NET 和 .NET Core 支持原則不同。 如需詳細資訊,請參閱 .NET MAUI 支持原則

在 .NET 8 中,.NET MAUI 會隨附為 .NET 工作負載和多個 NuGet 套件。 這種方法的優點是可讓您輕鬆地將專案釘選到特定版本,同時可讓您輕鬆地預覽未發行或實驗性組建。 當您建立新的 .NET MAUI 專案時,必要的 NuGet 套件會自動新增至專案。

本文列出 .NET MAUI for .NET 8 的新功能,並提供每個版本詳細信息的連結。

如需 .NET 8 新功能的相關信息,請參閱 .NET 8 的新功能。

新功能

雖然此版本 .NET MAUI 的重點在於品質,但也有一些新功能可在您的應用程式中啟用新的案例。

控制項

Desktop (電腦)

  • 功能表欄專案和操作功能表項可以透過稱為鍵盤快捷鍵的鍵盤快捷方式來叫用。 如需詳細資訊,請參閱 鍵盤快捷方式
  • Windows 應用程式可以發佈為未封裝的應用程式。 如需詳細資訊,請參閱 使用 CLI 發佈適用於 Windows 的未封裝 .NET MAUI 應用程式。

手勢辨識器

平台整合

XAML

疑難排解

其他

  • 視窗管理可以與類別分離 App 。 如需詳細資訊,請參閱 從 App 類別分離視窗管理。
  • Android 應用程式中可以輕鬆地取用數種系統字型。 如需詳細資訊,請參閱 取用字型
  • 在 iOS 上, MauiUIApplicationDelegate 取得 PerformFetch 可透過 iOSLifecycle.PerformFetch 委派覆寫或取用的方法。 如需詳細資訊,請參閱 iOS 平臺生命週期事件

類型取代和移除

下列類型或成員已被取代:

已移除下列型態或成員:

行為變更

下列行為已從上一個版本變更:

  • 從 XAML 使用 Map 控制項現在需要下列 xmlns 命名空間宣告: xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
  • 使用 方法從數據流 ImageSource.FromStream 載入影像時,Android 上會停用影像快取。 這是因為缺少建立合理快取索引鍵的數據。
  • 在iOS上,當軟輸入鍵盤涵蓋文字輸入欄位時,頁面會自動捲動,讓欄位位於軟輸入鍵盤上方。 KeyboardAutoManagerScroll.Disconnect您可以在 命名空間中Microsoft.Maui.Platform呼叫 方法,以停用此預設行為。 KeyboardAutoManagerScroll.Connect您可以呼叫 方法,在停用之後重新啟用行為。
  • 索引標籤的色彩在殼層應用程式中的設定方式在某些平臺上已變更。 如需詳細資訊,請參閱索引標籤外觀
  • 您不需要為 $(ApplicationIdGuid) 應用程式項目檔中的組建屬性指定值。 這是因為 .NET MAUI Windows 應用程式不再需要 GUID 作為應用程式識別碼,而是改用組建屬性的值 $(ApplicationId) 作為應用程式識別符。 因此,所有平臺現在都會使用相同的反向網域格式應用程式標識符,例如 com.mycompany.myapp。
  • .NET MAUI Mac Catalyst 應用程式不再限於功能表欄上的 50 個功能表項。
  • PlatformImage.FromStream 命名空間中 Microsoft.Maui.Graphics ,方法現在可以用來在 Windows 上載入影像,而不必使用 W2DImageLoadingService 類別。
  • 在Android上,動畫會遵守系統動畫設定。 如需詳細資訊,請參閱 基本動畫

效能

.NET MAUI 8 中有許多效能變更。 這些變更可分為五個區域:

如需詳細資訊,請參閱 .NET MAUI 中的 .NET 8 效能改進。

從 .NET 7 升級至 .NET 8

若要將專案從 .NET 7 升級至 .NET 8,請使用 Visual Studio 17.8+或獨立安裝程式dotnet workload install maui 命令安裝 .NET MAUI 工作負載

然後,開啟 . csproj 檔案,並將 Target Framework Monikers (TFM) 從 7 變更為 8。 如果您使用 TFM,例如 net7.0-ios13.6 請務必符合平臺版本或完全移除它。 下列範例顯示 .NET 7 專案的 TFM:

<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>

下列範例顯示 .NET 8 專案的 TFM:

<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>

針對下列 .NET MAUI NuGet 套件,也應該將明確套件參考新增至 . csproj 檔案:

<ItemGroup>
    <PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
    <PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>

$(MauiVersion)變數會從您安裝的 .NET MAUI 版本參考。 您可以將組建屬性新增$(MauiVersion)至 .csproj 檔案,以覆寫此值:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
        <UseMaui>True</UseMaui>
        <MauiVersion>8.0.3</MauiVersion>
    </PropertyGroup>
</Project>

使用夜間摘要的臨機操作組建或從提取要求下載的組建時,這非常有用。

此外,$(ApplicationIdGuid)您可以從 .NET 8 中的 .csproj 檔案中移除組建屬性。 如需詳細資訊,請參閱 行為變更

第一次建置升級的應用程式之前,請先刪除 binobj 資料夾。

注意

.NET 8 中 .NET MAUI 應用程式的專案範本會啟用具有建置屬性之專案的 $(Nullable) 可為 Null 內容。 如需詳細資訊,請參閱 可為 Null。

另請參閱