You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6升级部署后服务器无法找到视图问题求助

.NET6部署后找不到视图文件的问题排查与修复

问题背景

将.NET Core 3.1 MVC应用通过升级助手升级到.NET6后,本地运行正常,但部署到服务器后持续出现视图文件找不到的错误(文件实际存在),升级前本地与服务器均运行正常。

原代码问题分析

  1. 路由配置冲突:
    • ConfigureServices中同时调用AddMvc(x => x.EnableEndpointRouting = false)和AddControllersWithViews(),两者功能重叠且端点路由配置矛盾,导致路由解析逻辑混乱。
    • Configure中同时使用UseMvc()和UseEndpoints(),这两种路由方式不能共存,会干扰服务器环境下的视图路径解析。
  2. Razor运行时编译限制:
    虽然添加了AddRazorRuntimeCompilation(),但默认仅在开发环境启用,生产环境下如果视图未预编译,会导致找不到视图。
  3. 环境判断不规范:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:00:51