CSHTML视图修改后需重启应用才生效,如何禁用视图缓存?
我之前也踩过一模一样的坑!用Browser Link改CSS实时生效爽得很,但改.cshtml后浏览器自动刷新了,页面却还是老样子,非得重启应用才行——这确实是视图编译缓存在搞鬼,服务器端没重新编译修改后的视图,自然返回的还是旧HTML。下面分两种场景给你靠谱的解决办法:
ASP.NET Core 环境
1. 启用 Razor 运行时编译(推荐)
这是最彻底的解决方案,让视图修改后实时重新编译。在你的Program.cs(老版本是Startup.cs)里添加运行时编译服务:
// 注册控制器和视图服务时,添加运行时编译 builder.Services.AddControllersWithViews() .AddRazorRuntimeCompilation();
注意:这个配置只应该在开发环境启用,生产环境还是要预编译视图提升性能。你可以通过launchSettings.json里的ASPNETCORE_ENVIRONMENT确保当前是Development环境。
另外在Visual Studio里,也可以右键项目→属性→生成→勾选「启用 Razor 运行时编译」,不过代码配置的方式更稳定,不会因为IDE设置变动失效。
2. 临时清除本地视图缓存(应急用)
如果临时不想改代码,可以手动删除视图编译的临时文件:
- Windows 路径:
%USERPROFILE%\AppData\Local\Temp\ASP.NET\CoreWebSites\<你的项目名> - 删除这个目录下的所有文件,重启Browser Link或者刷新页面就能看到修改了。
传统 ASP.NET(非Core)环境
1. 修改 Web.config 禁用批量编译
在Web.config的<system.web>节点里,确保debug="true"同时设置batch="false":
<system.web> <compilation debug="true" batch="false" targetFramework="4.8" /> <!-- 其他配置 --> </system.web>
batch="false"会禁用视图的批量编译,让每个视图单独编译,修改后就能实时生效。另外debug="true"本身就是开发环境的标配,开启后也会默认禁用一些缓存优化。
2. 检查 Razor 宿主配置
如果上面的方法没用,还可以检查Web.config里的Razor宿主配置,确保没有开启缓存:
<system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <!-- 你的其他命名空间 --> </namespaces> </pages> </system.web.webPages.razor>
如果有cacheProvider相关的配置项,直接删除或者注释掉就行。
最后再提一句:Browser Link只是负责触发浏览器刷新,但核心是要让服务器端重新编译视图返回新的HTML,所以上面的配置才是解决问题的关键,不是浏览器缓存的锅~
内容的提问来源于stack exchange,提问作者wh1sp3r

