.NET 6升级部署后服务器无法找到视图问题求助
.NET6部署后找不到视图文件的问题排查与修复
问题背景
将.NET Core 3.1 MVC应用通过升级助手升级到.NET6后,本地运行正常,但部署到服务器后持续出现视图文件找不到的错误(文件实际存在),升级前本地与服务器均运行正常。
原代码问题分析
- 路由配置冲突:
ConfigureServices中同时调用AddMvc(x => x.EnableEndpointRouting = false)和AddControllersWithViews(),两者功能重叠且端点路由配置矛盾,导致路由解析逻辑混乱。Configure中同时使用UseMvc()和UseEndpoints(),这两种路由方式不能共存,会干扰服务器环境下的视图路径解析。
- Razor运行时编译限制:
虽然添加了AddRazorRuntimeCompilation(),但默认仅在开发环境启用,生产环境下如果视图未预编译,会导致找不到视图。 - 环境判断不规范:
Program.cs中硬编码判断环境为"Debug",而非使用标准的IsDevelopment()方法,可能导致日志或编译配置在服务器环境不生效。
修复方案
修改Startup.cs
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); services.AddDistributedMemoryCache(); services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(15); options.Cookie.HttpOnly = true; }); services.AddAuthentication(IISDefaults.AuthenticationScheme); // 统一使用AddControllersWithViews,移除重复的AddMvc // 强制在所有环境启用Razor运行时编译,解决服务器视图加载问题 services.AddControllersWithViews() .AddRazorRuntimeCompilation(options => { options.AllowRecompilingViewsOnFileChange = true; }); services.AddKendo(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseSession(); app.UseAuthentication(); app.UseAuthorization(); // 移除UseMvc,统一使用端点路由配置 app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}"); }); } }
修改Program.cs
public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging((hostingContext, logging) => { logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); // 使用标准环境判断方法,替代硬编码的"Debug" if (hostingContext.HostingEnvironment.IsDevelopment()) { logging.AddConsole(); logging.AddDebug(); } logging.AddEventLog(new EventLogSettings { SourceName = "wcb.ACIi.web" }); }) .Build(); } }
额外验证步骤
- 确认服务器已安装对应版本的.NET6运行时。
- 发布项目时,检查发布设置中是否包含
Views文件夹(右键项目→属性→发布→设置→文件发布选项,确保正确包含视图文件)。 - 检查服务器环境变量
ASPNETCORE_ENVIRONMENT是否设置为Production,避免开发环境配置干扰生产环境运行。
内容的提问来源于stack exchange,提问作者Behrooz
相关产品推荐
相关产品推荐

