我在 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
为我解决了这个问题。
您可以使用以下命令来发布项目。确保从解决方案目录的根文件夹运行:
dotnet publish -c Release -o ./publish
这是官方文档: