ASP.NET Core Razor类库页面构建后无法稳定访问问题求助
问题分析与解决思路
首先,这个问题不完全是RC级别的Bug,但确实和ASP.NET Core 2.1正式版早期搭配VS2017 15.7.3时的Razor类库(RCL)构建/页面发现机制的局限性有关。结合你的场景,我整理了几个针对性的解决思路:
1. 确认Razor类库的项目配置正确性
先检查你的Razor DLL项目是否是标准的Razor Class Library类型:
- 打开类库的
.csproj文件,确保开头是<Project Sdk="Microsoft.NET.Sdk.Razor">,而非普通类库的<Project Sdk="Microsoft.NET.Sdk">。 - 确认项目中包含以下编译配置(如果没有,手动添加):
这些配置确保Razor页面会被编译到DLL中,而非仅保留源文件。<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <RazorCompileOnBuild>true</RazorCompileOnBuild> <RazorCompileOnPublish>true</RazorCompileOnPublish> </PropertyGroup>
2. 修正主Web项目的引用方式
避免直接引用RCL的DLL文件,改为项目引用:
- 在VS中右键Web项目 → 添加 → 项目引用,选择你的Razor类库。这样VS会自动处理依赖关系,确保每次构建时都会同步RCL的最新编译结果,不会出现旧DLL残留的问题。
3. 清理构建缓存与发布冗余文件
本地构建场景:
- 除了VS的"清理解决方案",手动删除Web项目和RCL项目的
bin、obj文件夹,然后执行dotnet clean命令,彻底清除缓存。有时候VS的增量构建会跳过RCL的更新,导致页面无法被发现。
Azure发布场景:
- 在VS发布配置中,勾选删除目标中未包含的文件选项(发布向导的"设置"页面)。这样可以避免Azure服务器上残留旧版本的视图文件或DLL,干扰页面路由发现。
4. 验证Razor页面的路由与指令
确保RCL中的页面配置了正确的路由规则:
- 打开
myHome.cshtml,确认顶部有@page指令。如果需要自定义路由,可以写成@page "/Home/myHome"(虽然默认路由已经是这个路径,但显式声明可以避免路由匹配的歧义)。 - 在Web项目的
Startup.cs中,确认ConfigureServices和Configure方法正确配置了Razor页面支持:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); // 默认已包含对RCL页面的支持 } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // ... 其他中间件配置 app.UseStaticFiles(); app.UseRazorPages(); // 确保启用Razor页面路由 app.UseMvc(); }
5. 升级VS版本(关键建议)
VS2017 15.7.3是ASP.NET Core 2.1刚发布时的配套版本,存在一些RCL构建和页面发现的已知问题。建议升级到VS2017的最新补丁版本(如15.9.x),或者直接迁移到VS2019。后续版本的构建工具对RCL的依赖处理和页面发现逻辑做了大量优化,大概率能直接解决你的问题。
内容的提问来源于stack exchange,提问作者CPGAdmin
相关产品推荐
相关产品推荐

