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

ASP.NET中Razor运行时编译导致Hot Reload失效及调试异常

术语说明

本文涉及三项可让开发者在运行中应用程序里修改代码、无需重建重启的相关功能:

  • Edit and Continue:Visual Studio的调试中修改程序集功能,可在断点处(受部分限制)编辑托管代码并自动应用到调试目标。
  • Hot Reload:随Visual Studio 2022推出,类似Edit and Continue,无需断点暂停或调试器运行即可实现托管代码运行时重编译。
  • Razor Runtime Compilation:通过保存.cshtml文件时重编译,实现运行中编辑Razor视图的功能。

环境配置

  • Visual Studio 2022(17.4.4版本)
  • .NET 7(SDK:7.0.102)或.NET 6(SDK:6.0.403)
  • NuGet包:Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

上述组件的更早版本组合也会出现下述问题。配置步骤:

  • 启动Visual Studio 2022
  • 创建基于.NET 6或7的ASP.NET Core Web应用
  • 添加Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet包
  • 修改自动生成的Program.cs代码以启用Razor运行时编译:
// Add services to the container.
var mvcBuilder = builder.Services.AddRazorPages();

#if DEBUG
mvcBuilder.AddRazorRuntimeCompilation();
#endif

问题复现

在任意视图(如Index.cshtml)中设置断点并运行应用程序。
断点触发后修改Razor代码,或仅打开多个.cshtml文件,也会触发问题。
按下Ctrl+S保存并按下F5继续运行,会出现提示:

Hot Reload报错提示
Hot Reload无法自动应用更改,需重建应用以更新。

若修改.cshtml.cs中的代码,继续运行时会随机出现NullReferenceException或ExecutionEngineException异常。

临时解决方案

启动调试会话前关闭所有.cshtml文件。

咨询问题

  1. 是否有其他开发者遇到同样问题?
  2. 能否单独启用“Edit and Continue”而不启用“Hot Reload”?两者设置似乎绑定,只能同时开启或关闭。
  3. 如何实现在调试时编辑Razor文件和C#代码而不出现上述错误?
  4. 如何建议Microsoft将Esc键设置为“继续编辑”按钮的快捷键?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:15:54