You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发布集成Blazor WASM的ASP.NET Core Web API时AOT运行时错误

Blazor WebAssembly AOT编译后IIS Express无法加载模块问题解决

问题概述

在.NET 8环境下,基于ASP.NET Core Web API托管Blazor WebAssembly项目,为Blazor WASM启用Release模式的AOT编译后,通过IIS Express运行发布产物时,应用因无法加载必要的AOT模块启动失败;但使用dotnet-serve运行相同发布文件却能正常工作。最终改用dotnet publish命令发布解决了问题。

原因分析

这类问题通常源于自定义发布配置文件(.pubxml)未完整包含AOT编译生成的Native模块及配套加载脚本,或者IIS Express的静态文件处理规则未正确映射AOT相关文件类型(如.wasm、特定JS模块)。而dotnet publish命令会自动处理Blazor WASM的AOT编译产物,确保所有必要文件(Native模块、框架依赖、静态资源等)被完整打包到输出目录。

解决方案

  1. 直接使用dotnet publish命令发布
    放弃自定义发布配置文件,执行以下命令完成Release模式发布:

    dotnet publish -c Release
    

    该命令会自动处理AOT编译产物的收集与打包,确保部署文件完整性。

  2. 若需保留发布配置文件,添加必要配置
    如果必须使用.pubxml发布,需在配置文件中添加以下节点,保证AOT相关文件被正确包含:

    <PropertyGroup>
      <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
      <CopyBlazorWebAssemblyFilesToPublishDirectory>true</CopyBlazorWebAssemblyFilesToPublishDirectory>
    </PropertyGroup>
    

相关项目代码验证

Web API Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddScoped<IPasswordHasher<User>, UserPasswordHasher>();
builder.Services.AddIdentityCore<User>().AddUserStore<UserStore>().AddApiEndpoints();

builder.Services.AddRazorPages();
builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.MapIdentityApi<User>();

app.UseHttpsRedirection();

app.UseBlazorFrameworkFiles();

app.UseStaticFiles();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseRouting();

app.MapRazorPages();
app.MapControllers();
app.MapFallbackToFile("index.html");

app.Run();

WebAPI.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Geralt" Version="3.1.0" />
        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.10" />
        <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.10"/>
        <PackageReference Include="MongoDB.Driver" Version="3.0.0" />
        <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/>
    </ItemGroup>

    <ItemGroup>
      <ProjectReference Include="..\WebApp\WebApp.csproj" />
    </ItemGroup>

</Project>

WebApp.csproj

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
        <RunAOTCompilation>true</RunAOTCompilation>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.10" />
        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.10" PrivateAssets="all" />
    </ItemGroup>
</Project>

内容的提问来源于stack exchange,提问作者Wilco Bakker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:31:01