ASP.NET Core Razor视图发现异常:无法找到_Host.cshtml端点
解决Razor页面_Host.cshtml无法找到的问题
这个问题我之前处理过,核心根源是**ApplicationName被错误绑定到了Core程序集**,而Razor视图引擎正是依赖这个值来定位包含视图的程序集(你的Theme项目是被App引用的,本该以App作为根程序集来扫描)。当你在Core.Warmup.StartAsync()里初始化并启动Host时,框架会自动把当前执行的程序集(也就是Core)设为ApplicationName,这就导致视图引擎完全找不到Theme里的_Host.cshtml了。
几个可行的修复方案
方案1:把预热逻辑迁移到App项目(最推荐)
你已经发现把初始化代码移到App后视图就能正常加载,这是最合理的解决方案:
- 当从
App项目的Program.cs启动Host时,框架会自动将ApplicationName设为App(入口程序集),视图引擎会自动扫描App及其所有引用的程序集,自然就能找到Theme里的页面了。 - 操作起来也简单:把
Core.Warmup.StartAsync()里的Host初始化逻辑全部移到App/Program.cs,直接在入口项目启动Host即可。
方案2:手动强制指定ApplicationName(如果不能迁移逻辑)
如果因为某些原因必须保留Core里的预热逻辑,那可以在构建Host的时候显式指定ApplicationName为App,强制视图引擎用正确的程序集扫描视图:
// 在Core.Warmup.StartAsync()的HostBuilder配置中添加以下代码 .ConfigureServices((context, services) => { // 配置Razor视图引擎使用App作为根程序集 services.Configure<RazorViewEngineOptions>(options => { options.ApplicationName = "App"; }); }) // 或者直接在HostBuilder中设置WebHost的ApplicationKey .UseSetting(WebHostDefaults.ApplicationKey, "App")
方案3:检查项目基础配置
最后再确认两个基础配置,避免踩坑:
- 确保
App项目已经正确引用了Theme项目 - 检查
Theme里的_Host.cshtml文件的生成操作是否设为Content(右键文件→属性→生成操作),只有这样文件才会被包含在程序集中,让视图引擎能找到它。
补充:为什么dotnet run --applicationName App没用?
这个命令参数只是设置应用的显示名称,和Razor视图引擎用来扫描程序集的ApplicationName配置完全是两回事,所以用这个参数根本解决不了视图找不到的问题,必须通过代码或配置文件指定程序集级别的ApplicationName。
内容的提问来源于stack exchange,提问作者dryadepy
相关产品推荐
相关产品推荐

