Blazor WebAssembly AOT 编译怎么开启

Blazor WebAssembly AOT 编译需手动启用,仅支持.NET 7+独立部署模式;可通过发布配置文件或命令行参数(-p:RunAOTCompilation=true)开启,并需注意体积增大、反射限制及调试受限等问题。

Blazor WebAssembly AOT 编译不是默认开启的,需要显式配置。它适用于 .NET 7 及以上版本(推荐 .NET 8 或 .NET 9/10),且仅支持独立部署模式(即纯客户端 wasm 应用,不依赖 ASP.NET Core 服务器托管)。


✅ 正确开启 AOT 编译的两种常用方式

  • 方式一:通过发布配置文件(推荐,更可控)
    在 Visual Studio 中:

    • 右键项目 → “发布” → “新建发布配置文件” → 选择“文件夹”或目标(如 Azure Static Web Apps)
    • 点击“编辑” → 展开“设置” → 找到 “提前 (AOT) 编译” 选项 → 勾选 ✔
    • 保存并发布

    或者直接在 .pubxml 文件中添加:

    
      true
    
  • 方式二:命令行发布时指定参数
    在项目根目录执行:

    dotnet publish -c Release -p:RunAOTCompilation=true

    若使用 .NET 9+,还可加 -p:PublishTrimmed=true 配合裁剪(AOT 通常建议启用裁剪)。


⚠ 注意事项

  • AOT 编译会显著增加 wwwroot/_framework 下的 wasm 文件体积(可能翻倍),首次加载变慢,但后续运行更快(尤其 CPU 密集型逻辑)。
  • 不支持 dynamic、反射-heavy 的代码(如未标注

    [AssemblyMetadata] 或未保留类型),需配合 TrimmerRootAssemblyDynamicDependency 特性处理。
  • 调试体验受限:AOT 编译后无法在浏览器 DevTools 中单步调试 C# 源码(仅支持源映射有限调试,且需额外配置 DebugType=embedded)。
  • 必须使用 .NET WebAssembly SDK(安装时自动包含),可通过 dotnet workload list 查看是否含 wasm-tools

? 验证是否生效

发布完成后,检查输出目录(如 bin\Release\net10.0\publish\wwwroot\_framework):

  • 若看到 dotnet.wasm + 大量 *.dll.bc*.dll.o 文件,说明 AOT 已启用;
  • 若只有 dotnet.wasm*_wasm.js,则仍是解释执行(未开启 AOT)。

基本上就这些。