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

.NET Core MVC视图修改后仅全项目发布才生效?求助

这真不是你的操作问题!这是.NET Core MVC的默认行为

在传统ASP.NET MVC里,改个.cshtml文件直接丢服务器就能生效,但.NET Core MVC不一样——默认情况下,Razor视图会被预编译到项目的程序集(.dll文件)里,而非以独立的.cshtml文件形式存于部署目录。所以你单独替换服务器上的视图文件根本没用,服务器加载的还是预编译在dll里的旧版本,必须重新发布整个项目更新dll才能生效。

不过别担心,我们有办法让单独更新视图生效,分场景给你方案:

方案1:禁用预编译(适合开发/测试环境)

如果你只是在开发环境折腾,不想每次改视图都重新发布整个项目,可以直接在你的.csproj项目文件里加一段配置,关闭视图预编译:

<PropertyGroup>
  <RazorCompileOnPublish>false</RazorCompileOnPublish>
  <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>

划重点:这个方案不推荐在生产环境用!预编译是为了提升应用启动速度和运行性能,关掉会有明显的性能损耗。

方案2:启用Razor运行时编译(推荐生产/开发通用)

从.NET Core 3.0开始,官方提供了Razor运行时编译功能——它既能保留预编译的性能优势,又能在你修改视图文件时自动重新编译并加载新版本,不需要重启应用或重新发布整个项目。

配置步骤超简单:

  1. 先安装NuGet包:Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. 然后在项目的启动文件里注册服务:
    • 如果你用的是.NET 6+的Program.cs:
      var builder = WebApplication.CreateBuilder(args);
      // 把这行加进去,启用运行时编译
      builder.Services.AddControllersWithViews().AddRazorRuntimeCompilation();
      var app = builder.Build();
      // 后面的中间件配置正常编写即可
      
    • 要是用的是.NET Core 3.x-5.x的Startup.cs:
      public void ConfigureServices(IServiceCollection services)
      {
          // 在AddControllersWithViews后添加这个扩展方法
          services.AddControllersWithViews().AddRazorRuntimeCompilation();
      }
      
  3. 部署之后,不管是IIS还是Azure App Service,直接替换服务器上的.cshtml文件,刷新页面就能看到更新了!

针对Azure App Service的额外注意点

如果你用Azure App Service,还有个小坑要留意:
如果你的App Service开启了WEBSITE_RUN_FROM_PACKAGE(默认部署方式会设为1),那App Service是从压缩包直接运行的,你没法直接修改目录里的文件。这时候你要么把WEBSITE_RUN_FROM_PACKAGE改成0,要么换用Zip Deploy的方式部署(而非默认的Run From Package),这样才能顺利替换视图文件。

另外,你也可以用Azure门户里的Kudu高级工具,直接进到site/wwwroot/Views目录上传修改后的视图文件,不用走整个发布流程,超方便!

内容的提问来源于stack exchange,提问作者joym8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:57:28