无法从Razor类库(RCL)加载Razor页面的问题排查求助
解决方案
1. 修正RCL页面的路由与主项目引用路径
- RCL中的
Index.cshtml页面,@page指令无需指定完整路径,直接写最终访问的路由即可,示例:@page "/organizations/index" - 主项目
_Layout.cshtml中的链接,去掉SharedContent/Pages前缀,直接使用路由路径:<a class="navbar-brand" asp-page="/Organizations/Index">Org settings</a>
2. 修复RCL项目的编译配置(解决views.dll缺失问题)
打开RCL的.csproj文件,确保以下配置正确:
- 项目SDK必须是Razor专用类型:
<Project Sdk="Microsoft.NET.Sdk.Razor"> - 添加Razor支持属性并启用编译:
<PropertyGroup> <TargetFramework>net6.0</TargetFramework> <!-- 替换为你实际使用的.NET版本 --> <AddRazorSupportForMvc>true</AddRazorSupportForMvc> <!-- 启用编译以生成views.dll --> <RazorCompileOnBuild>true</RazorCompileOnBuild> <RazorCompileOnPublish>true</RazorCompileOnPublish> </PropertyGroup>
注:Visual Studio UI中确实没有"Generate views in output directory"和"Razor Compile"选项,这类配置需要直接编辑
.csproj文件实现。
3. 验证主项目的基础配置
- 确保主项目正确引用RCL项目,
.csproj中应有类似配置:<ItemGroup> <ProjectReference Include="..\SharedContent\SharedContent.csproj" /> </ItemGroup> - 确保主项目启用了Razor Pages:
- .NET 6+(Program.cs):
var builder = WebApplication.CreateBuilder(args); // 添加Razor Pages服务 builder.Services.AddRazorPages(); var app = builder.Build(); // 映射Razor Pages路由 app.MapRazorPages(); app.Run(); - .NET Core 3.1(Startup.cs):
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件配置... app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); }
- .NET 6+(Program.cs):
4. 清理重建项目
- 删除主项目和RCL项目下的
bin、obj目录 - 重新生成整个解决方案,确保编译过程无报错
内容的提问来源于stack exchange,提问作者Jack Thor
相关产品推荐
相关产品推荐

