Blazor Hybrid 是否支持在 Windows 上使用 NativeAOT?
结论
建议移除 PublishAot=true,恢复模板默认的 Windows 构建方式。对于题目中使用 .NET 10 默认模板创建的 .NET MAUI Blazor Hybrid 项目,在 Windows 上启用这项设置不属于受支持的 Blazor Hybrid 发布配置。
这段 MSBuild 条件可以选中 Windows 目标,并请求启用 NativeAOT,但无法自动解决 BlazorWebView 及其依赖的 NativeAOT 兼容性问题。即使构建成功,也不能据此判断这个组合受支持。
为什么构建成功,页面却无法显示?
Blazor Hybrid 的 Razor 组件在应用的 .NET 进程内运行,通过 BlazorWebView 渲染界面,不使用 WebAssembly。因此,Blazor WebAssembly 支持的 AOT 编译不能直接用于这里。Blazor Hybrid 官方说明
NativeAOT 要求应用及其依赖兼容代码裁剪,且不支持运行时代码生成。反射、组件发现或互操作等代码能否正常工作,需要框架和依赖库提供相应的兼容支持,单独添加一个发布属性无法完成这些适配。NativeAOT 的限制
题目中运行的文件路径是:
bin\Release\net10.0-windows10.0.19041.0\win-x64\my.exe
仅凭这个路径,无法判断该文件是否为 NativeAOT 发布产物。NativeAOT 编译发生在 dotnet publish 阶段,普通构建成功不足以验证发布结果。.NET MAUI 运行时与编译说明
目前缺少异常信息和日志,还无法确定这次页面空白的直接原因。组件初始化失败、资源加载失败或其他运行时问题都有可能。
如何恢复正常运行?
先删除新增的 PublishAot 配置,也可以将原配置改为:
<PropertyGroup>
<PublishAot Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">false</PublishAot>
</PropertyGroup>
然后清理项目的 bin、obj 目录,重新生成,再通过 Visual Studio 的 Windows 目标启动应用。发布时沿用模板原有的 Windows 发布流程。如果采用 MSIX 打包,应安装并启动生成的应用包。
如果关闭 NativeAOT 后页面仍然空白,可以在 MauiProgram.cs 的 builder.Build() 之前临时添加日志配置:
using Microsoft.Extensions.Logging;
// 在现有 builder 配置中添加
builder.Logging.AddFilter(
"Microsoft.AspNetCore.Components.WebView",
LogLevel.Trace);
builder.Logging.AddDebug();
在 Visual Studio 中附加调试器运行应用,然后查看“输出”窗口。AddDebug() 需要 Microsoft.Extensions.Logging.Debug 包;如果模板已经注册了该日志提供程序,就无需重复添加。Blazor Hybrid 日志排查说明
注意事项
不要尝试用 <RunAOTCompilation>true</RunAOTCompilation> 替换上述设置来修复问题。它用于 Blazor WebAssembly 的 AOT 编译,不是 Windows Blazor Hybrid 的 NativeAOT 开关。Blazor WebAssembly AOT 配置
忽略裁剪警告、添加保留规则或关闭个别分析器后,即使能够生成 exe,也不能据此认定该配置受支持。这些修改都需要逐项验证框架和依赖的兼容性,不能作为默认 Blazor Hybrid 项目的通用解决方案。
备注:内容仅供参考。
