.NET MAUI for .NET 9 中的新增功能

.NET 9 中的 .NET Multi-platform App UI (.NET MAUI) 侧重于提升产品质量。 这包括扩展测试覆盖范围、端到端方案测试和 bug 修复。 若要详细了解 .NET MAUI 9 预览版中的产品质量提升情况,请参阅以下发行说明:

重要

由于使用外部依赖项(例如 Xcode 或 Android SDK Tools),.NET MAUI 支持策略与 .NET 和 .NET Core 支持策略不同。 有关详细信息,请参阅 .NET MAUI 支持策略

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

Blazor 混合

.NET MAUI 9 预览版 5 在 Visual Studio 中添加了一个项目模板,即 .NET MAUI Blazor Hybrid 和 Web 应用,该模板使用 .NET MAUI Blazor Hybrid 应用和 Blazor Web 应用创建解决方案,这两种应用共享 Razor 类库项目中的通用代码

此模板也可用于 dotnew new

dotnet new maui-blazor-web -n AllTheTargets

控件增强功能

.NET 9 中的 .NET MAUI 还包括控件增强功能。

软键盘输入支持

.NET MAUI 9 预览版 4 新增了对 PasswordDateTime 的软键盘输入支持。 可以针对 EditorEntry 控件启用这些功能:

<Entry Keyboard="Date" />

Android

.NET for Android 9 预览版添加了对 API 35 的支持,可以缩短生成时间,以及改善应用的可剪裁性,以减小大小并提高性能。 有关 .NET for Android 9 预览版的详细信息,请参阅以下发行说明:

资产包

.NET for Android 9 预览版 3 引入了将资产放入单独包(称为资产包)的功能。 此功能支持上传通常大于 Google Play 允许的基本包大小的游戏和应用。 通过将这些资产放入单独的包中,可以上传大小高达 2Gb 的包,而非只能上传 200Mb 大小的基本包。

重要

资产包只能包含资产。 对于 .NET for Android,这意味着具有 AndroidAsset 生成操作的项目。

.NET MAUI 应用通过 MauiAsset 生成操作定义资产。 可以通过 AssetPack 属性指定资产包:

<MauiAsset
    Include="Resources\Raw\**"
    LogicalName="%(RecursiveDir)%(Filename)%(Extension)"
    AssetPack="myassetpack" />

注意

其他平台将忽略其他元数据。

如果要将特定项放置在资产包中,则可以使用 Update 属性来定义 AssetPack 元数据:

<MauiAsset Update="Resources\Raw\MyLargeAsset.txt" AssetPack="myassetpack" />

资产包可以有不同的传递选项,用于控制何时在设备上安装资产:

  • 安装时包与应用同时安装。 此类型包的大小最多可为 1Gb,但只能有一个此类型的包。 此传递类型使用 InstallTime 元数据指定。
  • 应用完成安装后不久,即会安装快速跟进包。 在安装这种类型的包时,该应用将能够启动,因此应该先检查它是否已完成安装,然后再尝试使用资产。 此类资产包的大小可达 512Mb。 此传递类型使用 FastFollow 元数据指定。
  • 按需包只有在应用专门发出请求时,才会下载到设备。 所有资产包的总大小不能超过 2Gb,最多可以有 50 个单独的资产包。 此传递类型使用 OnDemand 元数据指定。

在 .NET MAUI 应用中,可以使用 MauiAsset 上的 DeliveryType 属性指定传递类型:

<MauiAsset Update="Resources\Raw\myvideo.mp4" AssetPack="myassetpack" DeliveryType="FastFollow" />

有关 Android 资产包的详细信息,请参阅 Android 资产包

Android 15 beta 版支持

.NET for Android 预览版 4 添加了适用于代号为“Vanilla Ice Cream”的 Android 15 (API 35) 第一个 beta 版的 .NET 绑定。 若要为这些 API 生成解决方案,请更新项目的目标框架:

<TargetFramework>net9.0-android35</TargetFramework>

.NET for Android 预览版 5 将这些绑定扩展到 Android 15 beta 版 2,并改进了启动性能和应用大小。

LLVM 封送方法

在 .NET for Android 预览版 5 中,非 Blazor 应用现在会默认启用 Low level Virtual Machine (LLVM) 封送方法。 这使得测试应用的性能提高了约 10%

可以在项目文件 (.csproj) 中禁用 LLVM 封送方法

<PropertyGroup Condition="'$(TargetFramework)' == 'net9.0-android'">
    <AndroidEnableLLVM>false</AndroidEnableLLVM>
    <AndroidEnableLLVMOptimizations>false</AndroidEnableLLVMOptimizations>
</PropertyGroup>

剪裁增强功能

.NET for Android 预览版 5 修复了使用完全剪裁以减少应用大小时出现的问题。 完全剪裁通常仅针对应用的发行版本启用,并且可以在项目文件 (.csproj) 中进行配置

<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net9.0-android'">
    <TrimMode>Full</TrimMode>
</PropertyGroup>

iOS

iOS、tvOS、Mac Catalyst 和 macOS 上的 .NET 9 预览版对以下平台版本使用 Xcode 15.2:

  • iOS:17.2
  • tvOS:17.2
  • Mac Catalyst:17.2
  • macOS:14.2

有关 iOS、tvOS、Mac Catalyst 和 macOS 上的 .NET 9 预览版的详细信息,请参阅以下发行说明:

绑定

.NET for iOS 9 预览版 3 引入了可对多目标 .NET 版本进行 iOS 绑定的功能。 例如,可能需要为两个不同的 iOS 版本生成某个库项目:

<TargetFrameworks>net9.0-ios17.0;net9.0-ios17.2</TargetFrameworks>

这将生成两个库,一个使用 iOS 17.0 绑定,一个使用 iOS 17.2 绑定。

重要

应用项目应始终面向最新的 iOS SDK。

适用于 iOS 和 Mac Catalyst 的本机 AOT

在 .NET for iOS 9 预览版 4 中,适用于 iOS 和 Mac Catalyst 的本机预先(Ahead of Time,AOT)编译利用完整剪裁来减少应用的包大小和启动性能。 这是一项发布功能,当你准备好交付应用时可以使用它。

重要

应用及其依赖项必须完全可剪裁才能利用此功能。

另请参阅