软件工程-什么是热重载,如何使用热重载?

所谓“热重载”(Hot Reload),是一个可以允许开发者在应用程序运行时更改源代码,并立即看到效果的关键功能。 此前,微软曾选择将“热重载”限制在自家的 Visual Studio 2022 上,如此一来该功能就仅适用于 Windows,且成本很高。

使用热重载更新正在运行的代码

  1. 基于支持的应用程序类型打开项目。 有关 .NET 的详细信息,请参阅 .NET 应用程序支持。

  2. 确保在调试器设置或调试启动配置文件中禁用“启用本机代码调试”。

  3. 使用 F5 或 Ctrl+F5(如果应用程序支持)来启动附加了调试器的应用。

  4. 打开包含一些代码的 C#、C++ 或 Visual Basic 代码文件,这些代码可以通过正在运行的应用程序用户界面(例如,按钮或视图模型命令的代码隐藏)重新执行或通过计时器每隔一段时间触发并更改代码。

  5. 使用“热重载”按钮或按 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 热重载设置的屏幕截图

还可通过修改 .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进行处理,非常感谢!

上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐