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

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

通常,更新的代码将重新运行,以在以下条件下生效:

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

有关支持的方案的详细信息,请参阅支持的代码更改(C# 和 Visual Basic)。

Blazor WebAssembly

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

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

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

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

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

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

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

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

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

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

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

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

.NET 命令行界面 (CLI)

使用 dotnet watch 命令激活热重载。

dotnet watch

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

当进行不受支持的代码编辑(称为 不受支持的编辑)时,dotnet watch 会询问您是否要重启应用程序:

  • :重启应用。
  • :不重启应用,且应用在未应用更改的情况下继续运行。
  • 始终:在发生粗鲁的编辑时根据需要重启应用。
  • 从不:不重启应用并避免将来出现提示。

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

dotnet watch --no-hot-reload

禁用热重载

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

"hotReloadEnabled" : false

其他资源

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