“热重载”此前在 Visual Studio 文档和一些旧版 UI 文本中被称为“编辑并继续”
从 Visual Studio 2022 开始,Visual Studio 中的热重载功能可同时用于托管 .NET 和本机 C++ 应用程序。 无论使用哪种类型的应用,热重载的目的都是尽可能节省编辑之间的应用重启次数,从而使你通过减少等待应用重新生成、重启、重新导航到你在应用中的上一个位置等操作的时间来提高工作效率。
通过让你能够编辑应用程序的代码文件并立即将代码更改应用到正在运行的应用程序(也称为 热重载),从而提高工作效率。 应用更改后,可以通过在应用程序中操作(或通过某种定时器等)来重新运行代码,然后可以立即查看更改,无需通过断点来暂停应用程序!
使用 热重载 更新正在运行的代码
使用 F5 或 Ctrl+F5(如果支持)来启动附加了调试器的应用。
打开代码文件并更改代码。
使用“热重载”
按钮或按 Alt+F10 应用代码更改。
若要查看用户界面中的更改,需要重新执行代码。 例如,必须重新执行按钮的代码隐藏或者通过计时器按某一间隔触发的代码。 例如,由于 MetadataUpdateHandler 功能,ASP.NET Core支持自动浏览器刷新。
支持.NET应用程序
- 使用 Visual Studio 2022 并使用调试器启动应用时,基本热重载体验适用于大多数类型的.NET应用和框架版本。 此支持包括 .NET Framework、.NET Core 和 .NET 5+ (适用于 C# 和 Visual Basic(如果适用)。 此方案中的预期是,如果使用的是调试器,则假设热重载可用并进行尝试!
- 当使用 Visual Studio 2022 但不使用调试器(例如使用 CTRL-F5 启动应用)时,热重载面向大多数类型的 .NET 6 应用时可用。 在此方案中,不面向 .NET 6+ 的应用(即,它们面向 .NET 5 或更低版本)不支持“无调试器”方案,并且必须使用调试器获取热重载支持。
- 如果使用 Visual Studio 2022 和 .NET 6+ 应用,则支持大多数方案。 此支持不限于前面提到的新的“无调试器”功能。 它还包括其他新功能,例如支持 Blazor 项目的热重载、在任何 ASP.NET Core 应用中编辑 Razor 文件,以及 CSS 热重载。 使用 Visual Studio 2022 和面向 .NET 6 的应用程序相结合,可提供最强大的 热重载 体验。
下表显示了基于项目类型,支持附加调试器(F5)和未附加调试器(Ctrl+F5)时所需的最低.NET 热重载版本。 Visual Studio 2022 版本 17.8 或更高版本是必需的。
| 应用程序类型 | F5 | Ctrl+F5 |
MetadataUpdateHandler 支持 |
|---|---|---|---|
| 控制台 | ✅ | .NET 6 | .NET 6 |
| 在 Linux/macOS 上运行 (Docker 和 WSL) |
.NET 8 | .NET 6 | .NET 8 |
| 在 Arm64 上运行 | .NET 7 | .NET 7 | .NET 7 |
| WPF(Windows Presentation Foundation) | ✅ | .NET 6 | .NET 6 |
| WinForms | ✅ | .NET 6 | .NET 6 |
| ASP.NET | ✅ | .NET 6 | .NET 6 |
| Blazor Server | .NET 6 | .NET 6 | .NET 6 |
| Blazor WebAssembly | .NET 6 | .NET 6 | .NET 6 |
| 毛 伊 岛 (WinUI/Android/iOS) |
.NET 6 | -- | -- |
可以使用热重载进行的编辑类型由运行时和编译器版本决定,而不是由用于启动应用程序(F5 或 Ctrl+F5)的方法决定。
在以下部分中,我们提供了其他详细信息。
支持 .NET Framework 应用程序
使用 Visual Studio 2022 并使用调试器启动应用时,基本热重载体验适用于大多数类型的.NET应用和框架版本。 此支持包括 .NET Framework、.NET Core 和 .NET 5+ (适用于 C# 和 Visual Basic(如果适用)。 此方案中的预期是,如果使用的是调试器,则假设热重载可用并进行尝试!
支持C++应用程序
使用 Visual Studio 2022 并通过调试器启动应用程序时,可以使用 热重载 按钮,在调试器 (F5) 下对本机 C++ 应用程序进行热重载。 使用 CMake 和 OpenFolder 项目生成的应用也支持热重载。
要使项目支持热重载,需要设置以下选项:
- “项目”>“属性”>“C/C++”>“常规”>“调试信息格式”必须设置为“用于‘编辑并继续’的程序数据库
/ZI” - Project > 属性> Linker > 常规 >启用增量链接必须设置为“是”
/INCREMENTAL
有关支持的编辑,请参阅 C++ 支持的代码更改。
在使用调试器时,包含 .NET 或 .NET Framework 应用的 Visual Studio 2022
使用 Visual Studio 2022 并使用调试器启动应用时,热重载适用于大多数应用框架。
在任何使用.NET和Visual Studio托管调试器的地方,您应该能获得基本的热重载支持。 这一事实意味着,即使是Azure Functions这样的项目在此方案中也非常出色。
注意
默认情况下,某些项目使用混合模式调试,不支持热重载。 可以在项目设置中修改此设置,只需将项目 > 属性 > 调试 > 打开调试启动配置文件 UI> 启用本机代码调试设置为 false。
使用 Visual Studio 2022 和 .NET 应用程序,但不使用调试器
当面向大多数类型的 .NET 6+ 应用时,热重载 可以在没有调试器的情况下使用。
此功能专用于 6+ .NET。 这些不针对 .NET 6 及以上版本的应用(即,它们针对 .NET 5 或更低版本)不支持“无需调试器”场景,必须使用调试器来访问 热重载 功能。
此外,并非所有项目类型当前都支持“无调试器”方案,请参阅 support for .NET 应用程序。
使用 Visual Studio 2022 和 .NET 6+ 应用程序
如果你同时使用 Visual Studio 2022 并处理面向 .NET 6+ 的应用,则可以获得最完美且功能最强大的热重载体验的好处。
在此方案中受支持:
- Blazor 应用(服务器和 WebAssembly)
- 在 Blazor 和常规 ASP.NET Core 网站中编辑 Razor 文件
- CSS 热重载
- XAML 热重载
- 当在没有调试器的情况下运行应用时,支持热重载(如前面详细描述的那样)
如果你面向的是 .NET 6+,将继续在即将推出的 Visual Studio 2022 更新和 .NET 功能区段和主要版本中获得改进。
支持的 ASP.NET Core 方案
许多 ASP.NET 方案都支持基本 热重载 体验。 最普遍可用的功能是能够更改大多数类型 Web 应用程序的后台代码和其他 .NET 类文件。 此功能在使用Visual Studio调试工具时有效,并且在以前热重载可用的任何位置都有效。 有关更具体的指南,请参阅 ASP.NET Core 的 .NET 热重载支持。
对于以 .NET 6+ 为目标的 ASP.NET Core 开发人员,某些功能在更低版本的 .NET 中不可用。 这些功能包括:
- CSHTML: 编辑 Razor CSHTML 文件时,支持多种编辑类型。
- 浏览器刷新:编辑 razor 文件将在调试时自动在 Web 浏览器中刷新更改。 此功能以前仅在没有调试器的情况下启动应用时才可用。
- CSS 热重载: 可以在应用运行时更改 CSS 文件,并在键入时立即将更改应用到正在运行的应用。
- No Debugger:在使用Visual Studio启动没有调试器(CTRL-F5)的 Web 应用时获得热重载支持。
支持的.NET更改
.NET 热重载体验由 debugger 和 C# 编译器(Roslyn)提供支持。 Roslyn 支持的编辑 和 支持的代码更改(C# 和 VB) 列出了当前支持的编辑类型和潜在的未来增强功能。
支持的.NET框架更改
.NET 热重载体验由 debugger 和 C# 编译器提供支持。 支持的代码更改(C# 和 VB) 列出当前支持的编辑类型和潜在的未来增强功能。
不支持的.NET和.NET框架项目
某些项目配置中不提供热重载:
- 如果在不使用调试器的情况下使用Visual Studio,热重载仅适用于面向 .NET 6+ 的.NET应用。
- 如果使用Visual Studio调试器运行应用,但已在设置中禁用了
Enable 热重载 and Edit and Continue when debugging,则不支持热重载。 - 不支持发布或自定义生成配置。 你的项目必须使用
Debug生成配置。 - 如果您针对的是 F# 或 .NET Native 的项目。
- .NET 热重载不支持某些启动或编译优化。 例如,如果项目的调试配置文件按以下方式进行配置,则不支持.NET 热重载:
-
为你的项目启用了修整。 例如,如果在调试配置文件的项目文件中将
PublishTrimmed设置为 True,则不支持热重载。 -
为你的项目启用了 ReadyToRun。 例如,如果在调试配置文件的项目文件中将
PublishReadyToRun设置为 True,则不支持热重载。
-
为你的项目启用了修整。 例如,如果在调试配置文件的项目文件中将
有关更多详细信息,请参阅 不支持的方案。
F# 不支持热重载
调试 F# 代码时,不支持热重载或“编辑并继续”。 在调试会话期间,可以编辑 F# 代码,但应避免。 调试会话期间不会应用代码更改。 因此,调试时对 F# 代码所做的任何编辑都将导致源代码与正在调试的代码不匹配。
配置热重载
若要启用、禁用或配置热重载,请参阅 Configure Edit and Continue。
警告消息
如果看到以下对话框,热重载无法在不重启的情况下应用当前编辑。 可以选择重新生成应用并应用更改(重启)或继续编辑。 如果重新生成,则所有应用程序状态都将丢失。 如果继续编辑,则其他更改或更正可能会导致热重载再次工作。
如果在对话框中无法应用更改时选择 Always 重新生成选项,则当前Visual Studio会话中不会再次看到该对话框,Visual Studio会自动重新生成和重新加载,而不是显示对话框。
故障 排除
如果热重载未按预期工作,请检查以下各项:
- 验证是否正在运行受支持的应用和方案。 某些项目类型、混合模式调试、优化代码和 Attach to Process 方案不支持热重载。 有关详细信息,请参阅 不支持的方案。
- 确保应用程序正在使用
Debug配置,并在 Tools>Options>Debugging>.NET/C++ 热重载 中启用 热重载。 - 将 Logging Verbosity 设置为 Detailed 或 Diagnostic 以获取 热重载 输出中的详细信息。
- 打开 Output window,在 显示输出中,选择 热重载 以查看诊断消息。
- 如果在调试时出现行只读,则它可能是调用堆栈上的活动语句,或者编辑可能需要重启。
有关常见诊断的列表,请参阅热重载和“编辑并继续”错误消息。 如果问题仍然存在,并且输出未显示明确的原因,请使用 Report a Problem 向Visual Studio团队发送反馈。
如果在 .NET Core 上使用响应压缩,请参阅有关 response compression 的信息。