.NET 8 Blazor从Razor类库加载页面时的路由问题
.NET 8 Blazor 路由404问题(Razor类库页面)解决方法
可能的原因及对应解决步骤
1. 检查Razor类库(RCL)页面的路由指令
打开RCL中PostsPage.razor文件,确认@page指令的路由格式正确:
- 比如
@page "/posts",无多余空格、拼写错误 - 确保该路由没有和主项目中其他页面的路由重复(重复会导致RCL页面被覆盖)
2. 确认Routes.razor中的程序集引用正确
- 首先在
Routes.razor顶部添加RCL的命名空间引用,比如:@using YourRCLNamespace; // 替换成你的RCL实际命名空间 - 避免在标记中直接写数组初始化,改用代码块方式更可靠:
这样可以避免标记语法解析错误导致程序集未被加载。@code { private readonly IEnumerable<Assembly> _additionalAssemblies = new[] { typeof(PostsPage).Assembly }; } <Router AppAssembly="@typeof(Program).Assembly" AdditionalAssemblies="@_additionalAssemblies"> <!-- 原Found/NotFound内容保持不变 --> </Router>
3. 根据Blazor交互模式补充服务配置
.NET 8 Blazor Web App采用分层架构,不同交互模式需要在对应Program.cs中添加额外程序集:
- Interactive Server模式(服务器端):
在服务器项目的Program.cs中修改服务配置:builder.Services.AddRazorComponents() .AddInteractiveServerComponents() .AddAdditionalAssemblies(typeof(PostsPage).Assembly); // 添加这一行 - Interactive WebAssembly模式(客户端):
在客户端项目的Program.cs中修改:
这是升级到.NET 8后容易忽略的点,虽然文档说无需额外配置,但分层架构下需要显式添加。builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents() .AddAdditionalAssemblies(typeof(PostsPage).Assembly); // 添加这一行
4. 清理编译缓存并重建项目
- 右键解决方案 → 选择「清理解决方案」
- 删除所有项目的
bin和obj文件夹 - 重新生成整个解决方案
升级项目或引用RCL后,编译缓存可能导致程序集未被正确加载,这一步能解决大部分隐性问题。
5. 确认RCL的目标框架与主项目一致
将RCL的目标框架改为.NET 8(与主项目相同),避免跨版本兼容导致的程序集加载异常。
内容的提问来源于stack exchange,提问作者Husam Ebish
相关产品推荐
相关产品推荐

