使用 AOT 编译与 Blazor WASM 一起发布 ASP.NET Core Web API 时出现 AOT 运行时错误

问题描述 投票:0回答:1

我在 ASP.NET Core (.NET 8) 中创建了一个 Web API 项目以及一个 Blazor WebAssembly 项目。 问题是我想对 Blazor WebAssembly 项目使用提前 (AOT) 编译,但不幸的是,当我以发布模式发布时,Blazor WebAssembly 应用程序无法启动平台,因为它没有收到必要的 AOT 模块。

关于此错误,我只能说,当我在发布模式下发布 Blazor WebAssembly 应用程序(也使用 AOT)并尝试使用 IIS Express 运行它时,我遇到了同样的问题。当我使用 dotnet-serve 时,它工作得很好。我怀疑这一切都是因为必须提供一些有关 aot-runtime 的文件才能使 Blazor WebAssembly 应用程序正常运行,但这只是我的猜测。

我很高兴有人能帮助我解决这个问题。为了使事情尽可能清楚,我将在下面分享一些片段。

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();

// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.MapIdentityApi<User>();

app.UseHttpsRedirection();

app.UseBlazorFrameworkFiles();

app.UseStaticFiles();

// Configure the HTTP request pipeline.
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>

编辑:我正在使用发布配置文件,使用

dotnet publish
为我解决了这个问题。

c# asp.net-core blazor blazor-webassembly .net-8.0
1个回答
0
投票

您可以使用以下命令来发布项目。确保从解决方案目录的根文件夹运行:

dotnet publish -c Release -o ./publish

这是官方文档:

https://learn.microsoft.com/en-us/aspnet/core/blazor/web assembly-build-tools-and-aot?view=aspnetcore-8.0

© www.soinside.com 2019 - 2024. All rights reserved.