AddRazorRuntimeCompilation了解
AddRazorRuntimeCompilation 是 ASP.NET Core 的一条“开发期神器”扩展方法,作用一句话:让 Razor 页面(.cshtml)在应用运行时“改完保存即生效”,
无需重新生成、重启应用,浏览器刷新就能看到最新 HTML 变化。
-
默认行为(没加它时)
-
发布模式下:
.cshtml被预编译成 DLL,运行时只读 DLL,改文件无效。 -
调试模式下:虽然文件在磁盘,但框架默认不监听更改,仍需
dotnet build或重启调试器才能生效。
-
加上它之后
-
运行时监听
ContentRoot下的.cshtml变动。 -
一旦文件被保存 → 立即重新编译、加载新程序集 → 下次请求直接走新逻辑。
-
只应在开发环境开启,生产环境会带来额外开销与安全风险。
-
用法(两步)
-
安装包(SDK 自带,但默认不引用)
bash
dotnet add package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
-
注册服务
csharp
// Program.cs / Startup.cs
var builder = WebApplication.CreateBuilder(args);
// 仅开发环境启用
if (builder.Environment.IsDevelopment())
{
builder.Services.AddRazorPages()
.AddRazorRuntimeCompilation(); // 关键一行
}
(也支持
.AddControllersWithViews().AddRazorRuntimeCompilation())-
效果验证
-
dotnet run启动项目 -
任意
.cshtml里改文字 → 保存 → 浏览器 F5 → 立即看到变化,Visual Studio 无需停止调试。
-
注意与最佳实践
-
只限开发:生产环境不要调用,否则每次请求都会检查文件时间戳,性能下降。
-
与热重载(.NET 6+
dotnet watch)功能叠加时,两者可同时生效;不过dotnet watch还能改.cs文件,而RuntimeCompilation仅针对.cshtml。 -
若项目启用了预编译发布(
<RazorCompileOnBuild>true</RazorCompileOnBuild>),运行时编译器会跳过已预编译的视图,只编译未被预编译的单独文件;通常保持默认即可。 -
在 Docker/WSL 下开发,需确保卷挂载包含
.cshtml目录,否则监听不到变化。
一句话总结
“开发阶段让 .cshtml 改完就生效,不用重启,刷新即看;上线前关掉。”
AddRazorRuntimeCompilation 就是:“开发阶段让 .cshtml 改完就生效,不用重启,刷新即看;上线前关掉。”
浙公网安备 33010602011771号