所谓“热重载”(Hot Reload),是一个可以允许开发者在应用程序运行时更改源代码,并立即看到效果的关键功能。 此前,微软曾选择将“热重载”限制在自家的 Visual Studio 2022 上,如此一来该功能就仅适用于 Windows,且成本很高。
使用热重载更新正在运行的代码
-
基于支持的应用程序类型打开项目。 有关 .NET 的详细信息,请参阅 .NET 应用程序支持。
-
确保在调试器设置或调试启动配置文件中禁用“启用本机代码调试”。
-
使用 F5 或 Ctrl+F5(如果应用程序支持)来启动附加了调试器的应用。
-
打开包含一些代码的 C#、C++ 或 Visual Basic 代码文件,这些代码可以通过正在运行的应用程序用户界面(例如,按钮或视图模型命令的代码隐藏)重新执行或通过计时器每隔一段时间触发并更改代码。
-
使用“热重载”按钮或按 ALT+F10 应用代码更改。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6To419Vh-1651068068854)(https://docs.microsoft.com/zh-cn/visualstudio/debugger/media/vs-2022/dotnet-hot-reload.gifew=vs-2022)]
支持的 .NET 应用框架和方案
- 使用 Visual Studio 2022 和启动具有调试器的应用时,基本热重载体验适用于大多数类型的 .NET 应用和框架版本。 此支持包括 .NET Framework、.NET Core 和 .NET 5+(适用于 C# 和 Visual Basic)。 支持的应用类型包括 Web(代码隐藏更改)、桌面、移动、云和其他项目类型。 此方案中的预期是,如果使用的是调试器,则假设热重载可用并进行尝试!
- 使用 Visual Studio 2022 但不使用调试器(例如,使用 CTRL-F5 启动应用)时,即使面向大多数类型的 .NET 6 应用,热重载也可用。 这意味着不面向 .NET 6(.NET 5 或更低版本)的应用将不支持“无调试器”方案,并且必须使用调试器来获得热重载支持。
下表显示了哪些应用程序类型在附加调试器 (F5) 和不附加调试器 (Ctrl+F5) 的情况下支持 .NET 热重载,以及是否需要 .NET 6 才能获得最低支持(即 F5)。 Ctrl+F5 支持始终需要 .NET 6。 还显示了支持该功能的 Visual Studio 的最低版本。
应用程序类型 | 需要 .NET 6 | F5 | Ctrl+F5 |
---|---|---|---|
ASP.NET 代码隐藏 | 否 | 16.11 | 17.0 |
ASP.NET Razor(Blazor Server 和 ASP.NET Core) | 是 | 17.0 | 17.0 |
ASP.NET Razor (Blazor WASM) | 是 | 17.1 | 17.0 |
WPF | 否 | 16.11 | 17.0 |
WinUI3 | 否 | 16.11 | – |
WinForms | 否 | 16.11 | 17.0 |
控制台 | 否 | 16.11 | 17.0 |
.NET MAUI (WinUI 3) | 是 | 17.1 | – |
.NET MAUI (Android) | 是 | 17.1 | – |
.NET MAUI (iOS) | 是 | 17.1 | – |
.NET MAUI Blazor Hybrid (WinUI 3) | 是 | 17.1 | – |
.NET MAUI Blazor Hybrid (Android) | 是 | 17.1 | – |
.NET MAUI Blazor 混合 (iOS) | 是 | 17.1 | – |
在以下部分中,我们将对上述摘要进行扩展,并深入了解更多详细信息。
对 C++ 应用的支持
使用 Visual Studio 2022 并启动具有调试器的应用时,可以使用“热重载”按钮热重载在调试器 (F5) 下运行的本机 C++ 应用。 使用 CMake 和 OpenFolder 项目生成的应用也支持热重载。
使用 .NET 应用同时使用调试器的 Visual Studio 2022
备注
WinUI 3 默认使用混合模式调试,不支持热重载。 可以通过启用托管的调试器在项目设置中修改此设置,从而使热重载正常工作。 若要在项目中启用此功能,请修改 launchSettings.json,在 属性后 添加 。
从 Visual Studio 2022 版本 17.1 预览版 1 开始支持 .NET MAUI 应用。
使用 .NET 应用但不使用调试器的 Visual Studio 2022
当面向大多数类型的 .NET 6 应用(包括控制台、WPF、Windows 窗体 (WinForms)、ASP.NET Core MVC、Web API 和 Blazor 等项目类型)时,无需调试器即可使用热重载。
此功能专用于 .NET 6+。 这些不面向 .NET 6(.NET 5 或更低版本)的应用将不支持“无调试器”方案,并且必须使用调试器才能访问热重载功能。
另外,请注意,并非所有项目类型目前都支持“无调试器”方案。 具体而言:
- 在没有调试器的情况下,热重载不支持 UWP 应用。 这是设计使然,目前没有改善这一点的计划。
- 面向 iOS 和 Android 的 Xamarin.Forms 应用不支持 .NET 热重载(无论是在有还是没有调试器的情况下启动应用),但将继续支持 XAML 热重载。
- .NET MAUI调试器才支持这些应用。
使用 .NET 6 应用的 Visual Studio 2022
如果同时使用 Visual Studio 2022 和面向 .NET 6 的应用,则可以获得最精美且功能强大的热重载体验。
在此方案中受支持:
- Blazor 应用(服务器和 WebAssembly(请参阅注释))
- CSS 热重载
- 在没有调试器的情况下运行应用程序时支持热重载(更多详情如前所述)
如果你面向的是 .NET 6,将继续在即将推出的 Visual Studio 2022 更新和 .NET 功能区段和主要版本中获得改进。
备注
在 Visual Studio 2022 (版本 17.0) 的第一个版本中,热重载 在使用 Visual Studio 调试器时对 Blazor WebAssembly 的支持当前未启用,但从 17.1 开始提供。 如果在没有调试热重载的情况下通过 Visual Studio或更新到 17.1 版本来启动应用,则仍可以获取更新。
支持的 ASP.NET Core 方案
对于面向 .NET 6 的 ASP.NET Core 开发人员,还有一些其他功能不适用于较低版本的 .NET。 这些功能包括:
- CSS 热重载:可以在应用运行时更改 CSS 文件,键入的更改将立即应用到正在运行的应用。
- 无调试器:使用 Visual Studio 在没有调试器的情况下启动 Web 应用 (CTRL-F5) 时,可以获得热重载支持。
- 添加、更新或删除自定义属性
- 添加或更新记录结构
- 添加或更新 #line 指令
- 重命名 Lambda 参数
- 重命名现有方法的参数
不支持的 .NET 方案
不支持的方案:
- Xamarin.Forms 应用在 iOS 和 Android 方案中不支持 .NET 热重载。 面向 UWP 应用时,将获得对热重载的部分支持。 这是设计使然,我们不希望进行任何进一步的改进。 (注意:XAML 热重载 SDK.) 上的 Xamarin.Forms 客户将继续获得支持)
- Visual Studio 2022 版本 17.1 预览版 1 之前不支持 .NET MAUI 应用。 从 17.1 预览版 1 开始,支持 .NET MAUI,但仅限于附加了调试器的情况。
- 使用 F# 生成的应用或面向 .NET Native 的应用不支持热重载。
如果在不使用调试器的情况下使用 Visual Studio。 NET 热重载仅适用于面向 .NET 6 的应用。
此外,热重载在某些项目配置中不可用:
- 如果使用 Visual Studio 调试器来运行应用,但在设置中禁用了 ,则不支持热重载。
- 不支持版本或自定义生成配置。 你的项目必须使用“调试”生成配置。
- .NET 热重载不支持某些启动或编译优化。 例如,如果项目的调试配置文件是通过以下方式配置的,则不支持 .NET 热重载:
- 为你的项目启用了修整。 例如,如果在调试配置文件的项目文件中将 设置为 True,则不支持热重载。
- 为你的项目启用了 ReadyToRun。 例如,如果在调试配置文件的项目文件中将 设置为 True,则不支持热重载。
- 对于 WinUI 3 应用程序,会默认启用本机代码调试(即使 LaunchSettings.json 中缺少设置也会默认启用),在按此方式执行混合模式调试时,不支持 .NET 热重载。 因此,必须将显式设置 添加到 LaunchSettings.json 中,以便 .NET 热重载正常工作。
配置热重载
可以通过从“热重载”下拉按钮中选择“设置”来配置热重载。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D9qzQJL0-1651068068855)(https://docs.microsoft.com/zh-cn/visualstudio/debugger/media/vs-2022/dotnet-hot-reload-configure.pngew=vs-2022)]
或者,打开“工具” > “选项” > “调试” > “.NET/C++ 热重载”。
热重载的设置包括:
- 在不调试的情况下启动时启用热重载。 在没有附加调试器的情况下启动时启用热重载 (Ctrl+F5)。
- 保存文件时应用热重载。 保存文件时应用代码更改。

还可通过修改 .NET 6 项目 launchSetting.json 并设置为 来控制 .NET 热重载在项目级别 是否可用 。
示例:
XAML复制
警告消息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u9XzZlp8-1651068068856)(https://docs.microsoft.com/zh-cn/visualstudio/debugger/media/vs-2022/dotnet-hot-reload-apply-changes.pngew=vs-2022)]
如果在对话框中选择“始终重新生成”选项,则不会在当前 Visual Studio 会话中再次看到该对话框,并且 Visual Studio 将自动重新生成和重新加载,而不是显示对话框。
备注
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!