对 ASP.NET Core 的 .NET 热重载支持

.NET 热重载会将代码更改(包括对样式表的更改)应用到正在运行的应用,而无需重启应用,也不会丢失应用状态。 所有 ASP.NET Core 6.0 和更高版本的项目都支持热重载。

通常,将重新运行更新的代码,以在下列情况下生效:

  • 某些启动逻辑仅运行一次:
    • 中间件,除非代码更新是委托给内联中间件进行的。
    • 已配置的服务。
    • 路由创建和配置,除非代码更新是委托给路由处理程序进行的(例如 OnInitialized)。
  • Blazor 应用中,框架会自动触发 Razor 组件呈现。
  • 在 MVC 和 Razor Pages 应用中,热重载自动触发浏览器刷新。
  • 删除 RazorRazor属性不会导致重新呈现组件。 必须重启应用。

若要详细了解受支持的方案,请参阅支持的代码更改(C# 和 Visual Basic)

Blazor WebAssembly

Blazor WebAssembly 热重载支持以下代码更改:

  • 新类型。
  • 嵌套类。
  • 对方法主体的大多数更改,例如添加、删除和编辑变量、表达式和语句。
  • lambda 表达式本地函数的主体进行的更改。
  • 向现有类型添加静态和实例方法。
  • 向现有类型添加静态和实例字段、事件和属性。
  • 向现有方法添加静态 Lambda。
  • 向先前已捕获 this 的现有方法添加可捕获 this 的 Lambda。

请注意,在删除之前设置组件参数值的属性时,将释放并重新初始化该组件,以将删除的参数设置回其默认值。

Blazor WebAssembly 应用不支持以下代码更改:

Blazor WebAssembly 热重载支持以下代码更改:

  • 新类型。
  • 嵌套类。
  • 对方法主体的大多数更改,例如添加、删除和编辑变量、表达式和语句。
  • lambda 表达式本地函数的主体进行的更改。
  • 向现有类型添加静态和实例方法。
  • 向现有类型添加静态字段。
  • 向现有方法添加静态 Lambda。
  • 向先前已捕获 this 的现有方法添加可捕获 this 的 Lambda。

请注意,在删除之前设置组件参数值的属性时,将释放并重新初始化该组件,以将删除的参数设置回其默认值。

Blazor WebAssembly 应用不支持以下代码更改:

Blazor WebAssembly 热重载支持以下代码更改:

  • 对方法主体的大多数更改,例如添加、删除和编辑变量、表达式和语句。
  • lambda 表达式本地函数的主体进行的更改。

Blazor WebAssembly 应用不支持以下代码更改:

  • 添加新的 lambda 或本地函数。
  • 添加新的 await 运算符yield 关键字表达式。
  • 更改方法参数的名称。
  • 方法主体之外的更改。
  • 添加实例(非 static)字段、事件或属性。

.NET CLI

使用 dotnet watch 代码激活热重载:

dotnet watch

若要强制应用重新生成和重启,请使用命令行界面中的键盘组合 Ctrl+R

进行不受支持的代码编辑时(称为强制编辑), 会询问你是否要重启应用:

  • :重启应用。
  • :不重启应用,并将应用保持在运行状态而不应用更改。
  • 始终:在发生强制编辑时按需重启应用。
  • 从不:不重启应用,也避免未来出现提示。

若要禁用热重载支持,请将 --no-hot-reload 选项传递给 dotnet watch 命令:

dotnet watch --no-hot-reload

禁用热重载

Properties/launchSettings.json 中的以下设置禁用热重载:

"hotReloadEnabled" : false

其他资源

有关详细信息,请参阅 Visual Studio 文档中的以下资源: