.NET 8 中 .NET MAUI 的新增功能

在 .NET 8 中,.NET MAUI 的重点是质量。 在 .NET 8 中,合并了 1618 个拉取请求,关闭了 689 个问题。 其中包括来自 .NET MAUI 团队和 .NET MAUI 社区的更改。 这些更改应能大幅提高 .NET 8 的质量。

重要说明

由于要与底层外部依赖关系(如 Xcode 或 Android SDK 工具)协同工作,.NET Multi-platform App UI (.NET MAUI) 支持策略不同于 .NET 和 .NET Core 支持策略。 有关详细信息,请参阅 .NET MAUI 支持策略

在 .NET 8 中,.NET MAUI 作为 .NET 工作负载和多个 NuGet 包提供。 这种方法的优势在于,它使你能够轻松地将项目固定到特定版本,同时使你能够轻松预览未发布的版本或实验性版本。 创建新的 .NET MAUI 项目时,所需的 NuGet 包会自动添加到项目中。

本文列出了 .NET 8 中 .NET MAUI 的新增功能,并提供了每个功能的详细信息的链接。

有关 .NET 8 新增功能的信息,请参阅 .NET 8 的新增功能

新功能

虽然此版本的 .NET MAUI 的重点是质量,但也有一些新功能可在应用中实现新的应用场景。

控件

桌面

手势识别器

平台集成

XAML

故障排除

杂项

  • 窗口管理可以与 App 类分离。 有关详细信息,请参阅从应用类分离窗口管理
  • 可以在 Android 应用中轻松使用多种系统字体。 有关详细信息,请参阅使用字体
  • 在 iOS 上,MauiUIApplicationDelegate 获取可以通过 iOSLifecycle.PerformFetch 委托重写或使用的 PerformFetch 方法。 有关详细信息,请参阅 iOS 平台生命周期事件

类型弃用和删除

已弃用以下类型或成员:

已删除以下类型或成员:

行为变更

与上一版本相比,已更改以下行为:

  • 现在,使用 XAML 中的 Map 控件需要以下 xmlns 命名空间声明:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
  • 在 Android 上使用 ImageSource.FromStream 方法从流加载图像时禁用图像缓存。 这是由于缺少用于创建合理缓存密钥的数据。
  • 在 iOS 上,当软输入键盘覆盖文本输入字段时,页面会自动滚动,以便该字段位于软输入键盘上方。 可以调用 Microsoft.Maui.Platform 命名空间中的 KeyboardAutoManagerScroll.Disconnect 方法来禁用此默认行为。 在禁用该行为后,可以调用 KeyboardAutoManagerScroll.Connect 方法来重新启用该行为。
  • 在 Shell 应用中设置选项卡颜色的方式在某些平台上有所变化。 有关详细信息,请参阅选项卡外观
  • 无需在应用的项目文件中指定 $(ApplicationIdGuid) 生成属性的值。 这是因为 .NET MAUI Windows 应用不再需要 GUID 作为应用 ID,而是使用 $(ApplicationId) 生成属性的值作为应用 ID。 因此,现在所有平台都使用相同的反向域名格式应用 ID,例如 com.mycompany.myapp。
  • .NET MAUI Mac Catalyst 应用不再有菜单栏上 50 个菜单项的限制。
  • 现在可以使用 Microsoft.Maui.Graphics 命名空间中的 PlatformImage.FromStream 方法在 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>

使用来自夜间订阅源的临时生成或从拉取请求下载的版本时,这非常有用。

此外,可以从 .NET 8 中的 .csproj 文件中删除 $(ApplicationIdGuid) 生成属性。 有关详细信息,请参阅行为变更

在首次生成升级的应用之前,请先删除 binobj 文件夹。

注意

.NET 8 中 .NET MAUI 应用的项目模板为具有 $(Nullable) 生成属性的项目启用可为 null 的上下文。 有关详细信息,请参阅可为 null

另请参阅