使用 Visual Studio 2022 中的 Hot Reload 加速 .NET 和 C++ 开发

2021-07-30 01:35:25

随着最近发布的 Visual Studio 2022 预览版 2,我们想使用这篇博文深入探讨全新的热重载体验,该体验适用于托管 .NET 和新支持的本机 C++ 应用程序。使用 Hot Reload,我们的目标是在编辑之间为您节省尽可能多的应用程序重启,通过减少您在继续构建应用程序时花费在构建/重新启动上的时间来提高您的工作效率。我们试图通过让您编辑应用程序代码文件并在许多情况下立即应用这些代码更改而无需执行诸如暂停应用程序执行或重新启动等操作来实现此目标。这种全新的代码文件热重载技术还继续与 XAML 热重载并行工作,使 XAML 和 .NET 热重载可用于那些使用 XAML 进行 UI 的应用程序。热重载还可以与您可能习惯的现有调试器功能一起使用,例如断点、“编辑并继续”(EnC) 以在断点处修改正在运行的代码和其他功能。在此版本中,Hot Reload 适用于多种类型的应用程序,其中包括由 XAML 提供支持的应用程序,例如 WPF 和 WinUI 3,以及许多其他应用程序,例如 Windows 窗体、ASP.NET Web 应用程序、Blazor 服务器、控制台应用程序以及几乎任何其他需要现代 .NET 运行时与 Visual Studio 调试器结合使用。此外,我们正在积极努力在不久的将来支持更多应用程序类型,例如 Blazor Wasm 和 .NET MAUI iOS/Android。关注我们宣布在未来版本中支持其他类型的应用程序。虽然自 Visual Studio 2019 版本 16.11 以来,热重载体验现已可用于公共预览,但在这篇文章中,我们将详细介绍 Visual Studio 2022 预览版 2 中的新增功能的具体细节,并提供对即将推出的(或至少计划中的)功能的一瞥将交付)在未来的预览版本中。在此版本中,我们很高兴地宣布对 Hot Reload 体验进行重大改进,亮点包括我们最初支持在 ASP.NET Web 应用程序中编辑 Razor 页面、在调试器体验期间支持 Hot Reloading C++ 应用程序、使用 CTRL-F5 启动应用程序时无需调试器即可使用 .NET 热重载,并支持更多类型的编辑。

除了这些改进之外,此版本还具有各种错误修复和稳定性增强。下面让我们深入了解每个区域的细节。在此版本中,.NET 热重载支持扩展到编辑以前可用的 ASP.NET 代码隐藏之外。在此版本中,现在可以编辑 Blazor 服务器应用程序以编辑 .Razor 文件,并且无需重新构建/重新启动即可应用受支持的更改。 ASP.NET 方案现在还支持在应用热重载更改后自动刷新浏览器。目前仅在使用 CTRL-F5 启动您的应用程序时才支持此功能,并且将在未来的预览版中加入调试器 (F5)。最后,ASP.NET 开发人员现在可以在保存时通过热重载应用他们的更改,而不仅仅是在按下应用代码更改按钮时。此功能在此预览版中默认处于启用状态,并且可以配置并在未来版本中更广泛地适用于其他类型的应用程序。从此预览开始,我们现在可以在使用 Visual Studio 调试器 (F5) 的同时使用 Visual Studio 中的热重载体验来将代码更改应用于正在运行的 C++ 应用程序。要使用此功能,请打开您现有的 C++ 项目,启动带有调试器的应用程序,更改您的代码,并在应用程序运行时使用“应用代码更改”按钮。通过与应用程序或计时器中的任何 UI 界面交互再次重新执行代码将触发新的更改,而无需重新启动应用程序或等待断点被命中。 C++ 热重载由本机编辑并继续提供支持,有关支持的编辑和限制,请参阅我们的文档。

只要使用 /ZI 编译器开关,就可以编辑由 MSVC 工具集编译的任何代码库。 Hot Reload 动态地将您的更改注入应用程序,并且不会触发应用程序的完全重建。热重载功能与编辑并继续相同,但不需要中断模式调试。您不再需要设置断点。如果您需要在进行更改之前停止程序,请使用“编辑并继续”。否则,热重载将提供最佳体验。 C++ 热重载仅在使用 Visual Studio 调试器时有效,虽然 .NET 热重载即将进入 CTRL-F5 和 CLI 体验,但目前尚未计划用于 C++ 应用程序。 C++ 热重载仅支持 MSBuild C++ 项目,但我们正在努力在即将发布的预览版中启用对 CMake 项目的支持。这只是我们探索 C++ 开发人员可能性的旅程的开始。我们希望您测试此功能,并就在 C++ 中的热重载和编辑并继续场景中哪些工作正常以及哪些不工作向我们提供反馈。

在今年早些时候 .NET Hot Reload 的初始版本中,我们首先启用了在调试器 (F5) 下运行 .NET 应用程序时的体验。在此版本中,我们现在还开始支持通过 CTRL-F5 机制在没有调试器的情况下启动 .NET 6 应用程序,同时仍保留在应用程序运行时应用更改的支持。我们使用此功能的目标是让 Hot Reload 在更多场景中可用,因此无论您喜欢在开发过程中如何运行 .NET 应用程序(例如 F5、CTRL-F5 或 CLI),我们都会在所有场景中使用 Hot Reload .在此版本中,此功能可用于 Windows 窗体、WPF、控制台、ASP.NET Core 和 Blazor 服务器应用程序。目前,其他应用程序类型将无法运行或可能不稳定。我们将在未来的版本中继续对此体验进行更多改进,敬请期待!请注意,在通过 CTRL-F5 或 CLI 启动应用程序时,使用调试构建配置和 .NET 6 都是使用 Visual Studio 新的热重载体验的要求。调试器 (F5) 也需要调试配置,但就支持的 .NET 版本而言,它在支持“编辑并继续”的任何地方都可以更广泛地使用。在此版本中,我们为 .NET 开发人员添加了对其他类型编辑的支持,这些改进适用于热重载和编辑并继续体验。此外,在您使用解决方案的多启动功能同时启动多个进程的情况下,我们还投资提高了热重载和编辑并继续的稳定性。此功能无法可靠运行,因此我们解决了问题,现在它应该可以完全正常运行。在 Visual Studio 2022 预览版 2 中,我们很高兴提供了一些关键的计划功能,在预览版 3 及更高版本中,我们将提供更多功能。以下是我们希望交付的内容的预览,当然计划总是会发生变化,但这是我们当前的路线图:

支持更多场景中的 Blazor Web 应用,例如支持 Blazor Wasm 和混合 .NET MAUI 桌面应用。支持在热重载期间编辑 CSS 文件,使您能够在同一会话期间更改代码隐藏和应用程序的 CSS 文件,并实时反映 CSS 更改。通过调试器 (F5) 支持 .NET MAUI iOS 和 Android 场景热重载移动应用程序。请注意,支持 CTRL-F5 和 CLI 等非调试器场景目前低于我们可以在 .NET 6 时间范围内交付的内容。对 Visual Studio 2022 中用户体验的其他改进,包括改进的粗鲁编辑对话框、新的设置面板、启用热重新加载以在“文件保存时”应用更改的选项等等。如果您现在很高兴在您的项目中尝试 Hot Reload,您可以通过以下方式开始:安装 Visual Studio 2022 Preview 2 并打开您现有的 .NET 或 C++ 项目并在调试配置中启动应用程序。应用运行后切换回 Visual Studio,进行受支持的编辑并使用调试工具栏中的新“应用代码更改 (ALT-F10)”按钮将更改应用到正在运行的应用程序。

现在重新执行已更新的代码以查看新逻辑。您可以通过应用程序 UI 中的操作或通过可以重新触发逻辑的计时器之类的东西来执行此操作。如果更改的代码从未重新执行,则 Hot Reload 将不会应用更改(例如,如果您的代码正在运行,则 Hot Reload 无法更新它,直到它停止执行并再次重新启动)。如果您所做的更改无法应用,您将看到我们称为“粗鲁编辑”对话框的内容,让您知道需要重新启动应用程序才能应用这些更改。在这种情况下,您可以尝试不同类型的编辑或重新启动应用程序以继续开发。您的反馈确实帮助我们构建了更好的产品,Hot Reload 也不例外,我们非常感谢您抽出时间尝试我们的最新功能,我们希望您使用 Visual Studio 反馈机制报告问题。我们希望听到的事情包括: 如果您发现 Hot Reload 导致某些内容崩溃或出现意外行为(您的应用程序或 Visual Studio 本身)。如果 Hot Reload 没有提供您希望的生产力改进,我们希望了解详细信息。