.NET MAUI RC1 带来诊断功能和实验性 Android CoreCLR 支持
微软已交付 .NET 10 的第一个发布候选版本(RC1)并提供了生产环境支持许可,表明该公司认为该框架已准备好用于生产。在 RC1 中更新的各种工作负载中,.NET 多平台应用 UI(.NET MAUI)获得了多项针对可靠性和开发人员生产力的增强。RC1 的发布说明重点关注可观察性改进、现有控件的调整以及 Android 的一个新的实验性运行时选项。
.NET MAUI 在 .NET 10 预览周期中一直在稳步发展。早期的预览版主要集中在性能优化和增量控件改进上,而平台的底层架构基本保持不变。RC1 发布延续了这一趋势,通过稳定 API 接口并添加有效期至 10 月 14 日的生产环境支持许可,开发人员可以在微软的支持下将 RC1 版本部署到生产环境中。与早期的预览版不同,RC1 是功能完整的版本;剩余的工作主要是错误修复和打磨,因此重点放在质量和诊断工具上,而不是主要的新控件。
其中一个重要的新增功能是面向 .NET MAUI 应用程序的全面且可扩展的诊断和布局性能指标跟踪。该版本引入了一个名为 Microsoft.Maui
的新 ActivitySource 和 Meter,用于跟踪布局操作。这些基础组件发出跟踪事件和性能计数器,可与 .NET Aspire 和 OpenTelemetry 仪表板集成,从而实现对布局测量和排列成本的可视化。该检测功能是围绕 IView.Measure()
和 IView.Arrange()
实现的零分配结构,以最小化开销。记录的指标包括测量和排列操作次数的计数器,以及这些操作持续时间的直方图。由于指标 API 可以通过 System.Diagnostics.Metrics.Meter.IsSupported
开关在运行时禁用,开发人员可以安全地裁剪或预编译他们的应用程序,从而在不需要诊断时避免其开销。
除了诊断功能,RC1 更新了 HybridWebView
控件,以支持两个新的初始化事件:WebViewInitializing
和 WebViewInitialized
。这些事件与 BlazorWebView
上可用的事件类似,允许开发人员在底层 Web 视图创建之前和之后进行挂钩。例如,处理程序可以在视图构建之前提供特定于平台的初始化参数(WebViewInitializing
),或者在原生 WebView 实例可用后调整其设置(WebViewInitialized
)。这一变化简化了需要跨 iOS、Android、Windows 和 macOS 自定义嵌入式 Web 控件的混合应用程序的编写。以前,此类自定义需要特定于平台的处理程序或反射;现在可以在单个跨平台事件处理程序中完成。
一个虽小但受欢迎的可操作性改进是在 RefreshView
上添加了 IsRefreshEnabled
属性。在此之前,开发人员只能通过 IsEnabled
禁用整个控件;当需要禁用刷新功能时,这会阻止所包含的内容进行交互。新属性允许开发人员在保持底层内容活动的同时禁用下拉刷新功能。这一变化统一了跨平台的行为,并在 XAML 声明中明确了意图。在发布说明中,微软展示了一个包装在 RefreshView
中的登录表单,当 IsRefreshEnabled="false"
时该表单仍可使用。
作为 RC1 稳定工作的一部分,微软已弃用了一些旧版 API。“压缩"布局类型现已过时,鼓励开发人员避免不必要的布局容器嵌套。在早期版本中提供有限检测功能的 Performance
和 IPerformanceProvider
类型也被标记为过时。这些移除标志着向上述新的标准化诊断基础设施的转变。
最大的运行时变化出现在 Android 工作负载中。开发人员现在可以通过在项目文件中设置 <UseMonoRuntime>false</UseMonoRuntime>
来选择在 CoreCLR 运行时上运行 Android 应用程序,而不是长期使用的 Mono 运行时。该功能被标记为实验性的,因此微软警告说应用程序大小将会增加,并且调试和一些运行时诊断可能不完整。尽管如此,此举表明了微软统一移动和桌面平台 .NET 运行时体验的意图。鼓励早期采用者提供反馈,并明确说明他们正在使用 CoreCLR。