VS2022运行ASP.NET Core时遇「找不到Index视图」问题求助
解决方案:ASP.NET Core 6 视图找不到+RuntimeCompilation版本兼容问题
一、先搞定RuntimeCompilation版本兼容问题
你的项目是net6.0框架,直接装7.x版本的包肯定不兼容,得装对应6.x系列的稳定版本:
- 打开NuGet包管理器,搜
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation - 在版本下拉框里选6.x的版本(比如6.0.25,和你本地的.NET 6 SDK版本匹配最好)
- 装完之后,在Program.cs里启用运行时编译,同时把重复的服务注册合并:
// 替换原来重复的AddControllersWithViews,合并成一行 builder.Services.AddControllersWithViews() .AddApplicationPart(typeof(HomeController).Assembly) .AddRazorRuntimeCompilation(); // 启用运行时编译 // 删掉那行重复的builder.Services.AddControllersWithViews();
二、解决视图找不到的问题
1. 先检查视图文件本身
确保你的项目里确实有/Views/Home/Index.cshtml:
- 文件名拼写要对(比如是
Index.cshtml不是index.cshtml,Windows本地不区分,但部署后容易出问题) - 右键这个文件看属性:「生成操作」设为
Content,「复制到输出目录」设为「如果较新则复制」
2. 修正Program.cs里的配置错误
你的Program.cs有重复注册和中间件顺序问题,改完之后的代码如下:
using SamepleApi; using System.Reflection; var builder = WebApplication.CreateBuilder(args); // 合并服务注册,避免重复 builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews() .AddApplicationPart(typeof(HomeController).Assembly) .AddRazorRuntimeCompilation(); var app = builder.Build(); // 环境配置 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); // 注意顺序:认证要在授权前面 app.UseAuthentication(); app.UseAuthorization(); // 路由配置留默认的就行,不用重复MapControllers app.MapRazorPages(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
关键修正点:
- 删掉重复的
AddControllersWithViews()调用 - 把
UseAuthentication()移到UseAuthorization()前面,这是ASP.NET Core中间件的固定顺序要求 - 去掉重复的
app.MapControllers(),默认路由已经覆盖了控制器的路由规则
3. 如果视图不在默认目录,手动加搜索路径
要是你的视图没放在/Views下面,就在服务注册时加自定义路径:
builder.Services.AddControllersWithViews(options => { // 比如视图在/MyViews目录下,就加这两行 options.ViewLocationFormats.Add("/MyViews/{1}/{0}.cshtml"); options.ViewLocationFormats.Add("/MyViews/Shared/{0}.cshtml"); }) .AddApplicationPart(typeof(HomeController).Assembly) .AddRazorRuntimeCompilation();
三、最后再检查这两点
- 确认HomeController的命名空间
SamepleApi拼写正确(注意是Sameple还是Sample?你的代码里是SamepleApi,确保项目命名空间和这个一致) - 清理项目重新生成:右键项目→清理,再右键→生成,清掉旧的编译缓存
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

