AddRazorRuntimeCompilation了解

AddRazorRuntimeCompilation 是 ASP.NET Core 的一条“开发期神器”扩展方法,作用一句话:
让 Razor 页面(.cshtml)在应用运行时“改完保存即生效”
无需重新生成、重启应用,浏览器刷新就能看到最新 HTML 变化。

  1. 默认行为(没加它时)

  • 发布模式下:.cshtml预编译成 DLL,运行时只读 DLL,改文件无效。
  • 调试模式下:虽然文件在磁盘,但框架默认不监听更改,仍需 dotnet build 或重启调试器才能生效。

  1. 加上它之后

  • 运行时监听 ContentRoot 下的 .cshtml 变动。
  • 一旦文件被保存 → 立即重新编译、加载新程序集 → 下次请求直接走新逻辑。
  • 只应在开发环境开启,生产环境会带来额外开销与安全风险。

  1. 用法(两步)

  1. 安装包(SDK 自带,但默认不引用)
bash
复制
dotnet add package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
 
  1. 注册服务
csharp
复制
// Program.cs / Startup.cs
var builder = WebApplication.CreateBuilder(args);

// 仅开发环境启用
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddRazorPages()
           .AddRazorRuntimeCompilation();   // 关键一行
}
 
(也支持 .AddControllersWithViews().AddRazorRuntimeCompilation()

  1. 效果验证

  1. dotnet run 启动项目
  2. 任意 .cshtml 里改文字 → 保存 → 浏览器 F5 → 立即看到变化,Visual Studio 无需停止调试。

  1. 注意与最佳实践

  • 只限开发:生产环境不要调用,否则每次请求都会检查文件时间戳,性能下降。
  • 热重载(.NET 6+ dotnet watch)功能叠加时,两者可同时生效;不过 dotnet watch 还能改 .cs 文件,而 RuntimeCompilation 仅针对 .cshtml
  • 若项目启用了预编译发布(<RazorCompileOnBuild>true</RazorCompileOnBuild>),运行时编译器会跳过已预编译的视图,只编译未被预编译的单独文件;通常保持默认即可。
  • 在 Docker/WSL 下开发,需确保卷挂载包含 .cshtml 目录,否则监听不到变化。

一句话总结
AddRazorRuntimeCompilation 就是:
“开发阶段让 .cshtml 改完就生效,不用重启,刷新即看;上线前关掉。”
posted @ 2025-10-09 16:02  yinghualeihenmei  阅读(7)  评论(0)    收藏  举报