.NET 6新特性试用 | 热重载

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 6新特性试用 | 热重载相关的知识,希望对你有一定的参考价值。

前言

在以前的开发模式下,我们修改代码后必须重新编译、重新运行才能看到效果。

而热重载提供了这样一种特性,它允许你在项目正在运行时修改代码,并将代码更改立即应用于正在运行的应用程序上。

热重载的目的是尽可能节省编辑之间的应用重启次数,从而使你通过减少等待应用重新生成、重启、重新导航到你在应用中的上一个位置等操作的时间来提高工作效率。

在.NET 6发布之前还有个小插曲,热重载差点从dotnet CLI中被移除。具体可以看这篇文章:https://devblogs.microsoft.com/dotnet/update-on-net-hot-reload-progress-and-visual-studio-2022-highlights/ 

下面,让我们尝试使用热重载来编写和调试正在运行的代码。

Demo

假设有下列代码,每秒向控制台输出一行文本:

int i = 0;
while (true)

    Console.WriteLine("My IO " + i++);
    await Task.Delay(1000);

1.使用VS2022

使用F5启动附加了调试器的应用程序,然后修改代码,最后单击“火焰”图标(“热重载”按钮)或按 ALT+F10 应用代码更改,又可以看到效果: 

2.使用dotnet CLI

在控制台窗口使用dotnet watch启动应用程序,然后修改代码,最后只需保存文件,等待一会就可以看到效果: 

可以看到,热重载并不是完全实时的。

结论

将Visual Studio 2022与.NET 6应用一起使用时,可以支持大多数应用类型的热重载。

下表显示了哪些应用程序类型在附加调试器(F5)和不附加调试器(Ctrl+F5)的情况下支持热重载,以及是否需要.NET 6才能获得最低支持(即 F5, Ctrl+F5支持始终需要.NET 6),还显示了支持该功能的Visual Studio的最低版本:

Application type.NET 6 required (F5)F5Ctrl+F5
ASP.NET code behindNo16.1117.0
ASP.NET Razor (Blazor Server and ASP.NET Core)Yes17.017.0
ASP.NET Razor (Blazor WASM)YesNo17.0
WPFNo16.1117.0
WinUI3No16.11No
WinFormsNo16.1117.0
ConsoleNo16.1117.0
XAML .NET MAUI WinUIYes17.1 Preview 1No
XAML .NET MAUI androidYes17.1 Preview 1No
XAML .NET MAUI iosYes17.1 Preview 1No
XAML + Blazor .NET MAUI WinUIYes17.1 Preview 1No
XAML + Blazor .NET MAUI AndroidYes17.1 Preview 1No
XAML + Blazor .NET MAUI iOSYes17.1 Preview 1No

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

以上是关于.NET 6新特性试用 | 热重载的主要内容,如果未能解决你的问题,请参考以下文章

.NET 6新特性试用 | 自动生成高性能日志记录代码

.NET 6新特性试用 | 常量内插字符串

.NET 6新特性试用 | 文件范围的命名空间

.NET 6新特性试用 可写JSON DOM API

.NET 6新特性试用 | System.Text.Json序列化代码自动生成

.NET 6新特性试用 | TryGetNonEnumeratedCount