Blazor WebAssembly如何新增无需重新编译即可生效的*.razor页面
Blazor WebAssembly 动态页面生效问题解决方案
首先明确基础逻辑:Blazor 默认采用预编译机制,所有.razor文件会在编译阶段转换为IL代码封装到dll中,路由规则也仅在编译时注册,因此默认新增.razor文件必须重新编译才能被识别,否则会返回404错误。
需求适配方案
根据你的调研系统场景,有两种可落地的实现路径:
方案1:启用Razor运行时编译(适配类aspx动态源文件需求,仅支持Blazor Server)
如果你可以切换为Blazor Server模式,可以完全实现和传统ASP.NET一致的新增/修改源文件无需重启发布的效果:
- 安装NuGet包:
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation - 调整
Program.cs配置,启用运行时编译:
builder.Services.AddRazorPages() .AddRazorRuntimeCompilation(); builder.Services.AddServerSideBlazor();
- 编辑项目
.csproj文件,添加发布时保留源文件的配置:
<PropertyGroup> <!-- 发布时拷贝razor源文件到部署目录 --> <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory> <!-- 保留编译引用,支持运行时编译 --> <PreserveCompilationReferences>true</PreserveCompilationReferences> </PropertyGroup>
配置完成后,部署目录会保留所有.razor源文件,修改或新增文件后无需重启站点即可自动生效。
方案2:动态表单渲染(更适配调研系统场景,支持Blazor WebAssembly)
你的业务需求本质是动态生成不同的调研表单,不需要生成物理.razor文件,更推荐该方案:
- 将每个调研的字段配置、样式规则、校验逻辑存储在数据库中,新增调研仅需新增配置记录
- 开发通用路由页面
DynamicSurvey.razor,路由规则配置为@page "/survey/{surveyId}" - 页面加载时根据传入的
surveyId拉取对应表单配置,通过RenderTreeBuilder动态渲染表单组件、绑定校验规则
该方案完全不需要新增物理页面,自然不需要重新编译发布,适配Blazor WebAssembly的客户端运行特性。
注意:Blazor WebAssembly 运行在客户端浏览器环境,无法直接读取服务端物理源文件,原生不支持运行时编译服务端新增的
.razor源文件,不建议硬做物理页面生成逻辑,优先选动态渲染方案。
问题示意图

内容的提问来源于stack exchange,提问作者kachi_kachi
相关产品推荐
相关产品推荐

