对 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

WebAssembly 热重载 (WasmEnableHotReload)

在 .NET 10 及更高版本中,WasmEnableHotReloadMSBuild 属性控制热重载基础结构是否包含在 .NET WebAssembly 应用的生成输出中,包括Blazor WebAssembly应用和非Blazor WebAssembly浏览器应用(wasmbrowser模板)项目。 对于Debug配置,该属性默认设置为true。

将该属性设置为 false 后,可从 dotnet build 输出中移除 热重载 依赖项;这在生成与打包工具兼容的构件时非常有用,例如供 webpack 或 Vite 使用。

若要禁用 WebAssembly 应用的热重载,请将属性设置为false应用的项目文件中(.csproj):

<PropertyGroup>
  <WasmEnableHotReload>false</WasmEnableHotReload>
</PropertyGroup>

若要为自定义(非Debug)配置启用热重载,请将属性设置为true:

<PropertyGroup>
  <WasmEnableHotReload>true</WasmEnableHotReload>
</PropertyGroup>

有关控制应用中热重载Blazor WebAssembly的详细信息,请参阅调试 ASP.NET CoreBlazor应用。

其他资源

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