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

迁移至IIS 10后CSHTML修改未生效,清理缓存仍无法解决

问题排查思路:ASP.NET MVC 部署IIS10后特定路由缓存无法清除

核心问题总结

将ASP.NET Framework MVC应用从IIS7.5(Windows Server 2012)迁移到IIS10.0(Windows Server 2019)后,/cms/about路由始终返回旧内容:

  • 修改/Views/Cms/About.cshtml的href属性无效果,即使删除该文件仍返回旧页面
  • 修改CmsController的About方法后,该路由未执行新代码,但同控制器下/cms/foo、/cms/bar路由正常更新
  • 常规缓存清理手段均无效

针对性排查建议

1. 路由规则冲突排查

由于存在/Views/Home/About.cshtml文件,需确认是否有路由规则导致/cms/about被错误映射:

  • 打开RouteConfig.cs,检查cms相关路由的优先级是否高于默认路由
  • 临时修改HomeController的About方法,添加唯一标识输出,验证/cms/about是否误调用了该方法

2. IIS URL重写模块缓存检查

IIS10的URL重写模块可能存在内置缓存:

  • 进入IIS管理器的站点URL重写模块
  • 点击右侧「查看服务器变量」,确认是否存在针对/cms/about的缓存规则
  • 临时禁用所有URL重写规则,测试/cms/about是否正常更新

3. ASP.NET MVC视图引擎缓存强制刷新

在应用启动时强制清除视图引擎缓存:

  • 在Global.asax.cs的Application_Start方法末尾添加代码:
    var viewEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault();
    if (viewEngine != null)
    {
        viewEngine.ViewLocationCache.Clear();
    }
    
  • 重新部署应用并回收应用池

4. IIS输出缓存深层配置检查

常规禁用输出缓存可能未覆盖特定路由:

  • 打开站点的「输出缓存」功能,针对/cms/about路径创建缓存规则并设置为「禁止缓存」
  • 检查服务器级别的输出缓存配置,确认是否存在全局规则影响该路由

5. 磁盘文件系统缓存检查

Windows Server 2019的NTFS缓存可能导致IIS读取旧文件:

  • 打开命令提示符,执行以下命令刷新文件系统缓存:
    fsutil behavior set disablelastaccess 1
    fsutil behavior set disable8dot3 1
    
  • 重启服务器后测试

6. 应用预编译配置检查

确认应用是否为预编译部署:

  • 检查发布配置,若启用「预编译站点」,需勾选「允许更新预编译站点」
  • 若为完全预编译,修改CSHTML后需重新预编译并发布

额外验证步骤

  • 临时给CmsController的About方法添加路由特性[Route("cms/about-new")],测试新路由是否返回新内容,验证控制器逻辑本身无问题
  • 检查站点web.config中的caching节点,确认是否存在针对MVC视图的自定义缓存设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:34:55