.NET 8 Blazor WebAssembly独立应用静态部署发布问题咨询
解决.NET 8 Blazor WebAssembly静态部署无index.html的问题
方法1:使用传统纯WASM模板(推荐)
.NET 8中仍保留了.NET 7的纯Blazor WebAssembly独立项目模板,直接执行以下命令创建项目:
dotnet new blazorwasm
执行dotnet publish后,发布文件夹会自动生成index.html,和.NET 7的行为完全一致,可直接部署到静态服务器。
方法2:改造Blazor Web App模板(若已使用新模板)
如果已经用dotnet new blazor -int WebAssembly创建了Blazor Web App项目(新模板),需要调整以下内容来支持静态部署:
- 修改项目SDK
打开项目的.csproj文件,将开头的<Project Sdk="Microsoft.NET.Sdk.Web">替换为:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
同时确保属性组和包引用与纯WASM项目一致:
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.0" PrivateAssets="all" /> <PackageReference Include="System.Net.Http.Json" Version="8.0.0" /> </ItemGroup>
- 替换Program.cs为纯WASM入口
删除原有的服务器端Program.cs代码,替换为:
var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<HeadOutlet>("head::after"); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); await builder.Build().RunAsync();
- 添加wwwroot/index.html
在项目的wwwroot目录下创建index.html文件,内容示例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>你的项目名称</title> <base href="/" /> <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" /> <link href="css/app.css" rel="stylesheet" /> <link href="你的项目名称.styles.css" rel="stylesheet" /> </head> <body> <div id="app">Loading...</div> <div id="blazor-error-ui"> An unhandled error has occurred. <a href="" class="reload">Reload</a> <a class="dismiss">🗙</a> </div> <script src="_framework/blazor.webassembly.js"></script> </body> </html>
注意将你的项目名称替换为实际的项目名称。
完成以上修改后,执行dotnet publish,发布文件夹会生成index.html,即可部署到静态服务器。
内容的提问来源于stack exchange,提问作者Flores
相关产品推荐
相关产品推荐

