前言

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

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

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

在.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) F5 Ctrl+F5
ASP.NET code behind No 16.11 17.0
ASP.NET Razor (Blazor Server and ASP.NET Core) Yes 17.0 17.0
ASP.NET Razor (Blazor WASM) Yes No 17.0
WPF No 16.11 17.0
WinUI3 No 16.11 No
WinForms No 16.11 17.0
Console No 16.11 17.0
XAML .NET MAUI WinUI Yes 17.1 Preview 1 No
XAML .NET MAUI Android Yes 17.1 Preview 1 No
XAML .NET MAUI iOS Yes 17.1 Preview 1 No
XAML + Blazor .NET MAUI WinUI Yes 17.1 Preview 1 No
XAML + Blazor .NET MAUI Android Yes 17.1 Preview 1 No
XAML + Blazor .NET MAUI iOS Yes 17.1 Preview 1 No

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

.NET 6新特性试用 | 热重载相关推荐

  1. .NET 6新特性试用 | 总结:我最喜欢的5个特性

    前言 不知不觉,<.NET 6新特性试用>系列文章已经写了20多篇,而今天终于要告一段落了. 如果你还没有看过,详细文章列表在这里: .NET 6新特性试用系列 在这么多特性中,我最喜欢如 ...

  2. .NET 6新特性试用 | 可空引用类型

    前言 在查看<隐式using指令>功能时,我们在csproj中发现这样一个属性: 那么,Nullable到底是干嘛的? 可为空上下文 严格来说,这不是新特性,而是C# 8.0引入的特性之一 ...

  3. 5.0 新特性试用体验之 Clustered Index

    作者:hzc989 原文来源: https://tidb.net/blog/69dd056c [是否原创]是 [首发渠道]TiDB 社区 [目录] 一.引言 二.基础前情回顾 三.era withou ...

  4. .NET 6新特性试用 | LINQ功能改进

    前言 .NET6为LINQ添加了多个新API,在本文中,我们将始终使用User类逐一演示这些添加到LINQ中的内容: public class User {public string Name { g ...

  5. .NET 6新特性试用 | PeriodicTimer

    前言 在.NET中,已经存在了5个Timer类: System.Threading.Timer System.Timers.Timer System.Web.UI.Timer System.Windo ...

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

    前言 我们常用JSON的方式,是将类对象序列化/反序列化: var user = new User { Name = "My IO" }; var json = JsonSeria ...

  7. .NET 6新特性试用 | SDK工作负载

    前言 为了应对.NET SDK能够支持的程序集项目(例如iOS.Android.WASM)的不断增长,从.NET 6开始,允许用户仅安装必要的SDK(例如ASP.NET Core),而不是一次性安装& ...

  8. .NET 6新特性试用 | ArgumentNullException卫语句

    前言 在前面的文章中(<可空引用类型>),我们介绍过编译器会帮我们检查空引用,但是仅仅是警告.最好的方式还是在运行时用卫语句进行检查: private void Test(WeatherF ...

  9. .NET 6新特性试用 | 最小Web API

    前言 如果你使用过其他一些轻量级Web框架,比如Node.JS,你就会知道,创建具有最小依赖项的HTTP API是多么简单: var express = require('express') var ...

最新文章

  1. java 处理 url_Java URL处理 - Java 教程 - 自强学堂
  2. Java主线程等待子线程、线程池
  3. BZOJ3522[Poi2014]Hotel——树形DP
  4. postman自动打开_postman---postman自动发博客
  5. xml文档的pull解析与SAX解析
  6. 计算机软件专业代码表,2019-04-09计算机软件适用国民经济行业代码表
  7. 计算机二级c语言作弊技巧,计算机等级考试二级C语言题型分析与应试技巧
  8. WinDbg 蓝屏分析 Windows Dump 文件教程
  9. 图解深度学习的笔记:1.MP模型,感知器,BP下的多层感知器
  10. 测量平差理论知识结构梳理
  11. python爬虫百度图片_python爬取百度图库多张图片
  12. 短消息类新旧服务代码对应表
  13. c语言课程设计作业心得体会,【c语言课程设计心得体会】 c语言课程设计报告总结...
  14. A/Btest:组间的差异性检验,统计功效以及反选样本量,附python底层实现代码
  15. 如果你喜欢上了一个程序员小伙
  16. 医学四视图-005-四视图加按钮
  17. DOM是什么?有什么用处?js与DOM啥关系?
  18. Pikachu漏洞练习平台----验证码绕过(on server) 的深层次理解
  19. 关于评审--从思想到落地
  20. 在Blender中使用代码控制人物模型的嘴部动作 - 嘴部张开

热门文章

  1. Class Diagram
  2. 将 iOS 应用的体积控制在 20MB 以内对于其下载量有很明显的影响吗?
  3. MS UC 2013-2-Deploy Microsoft Exchange Server 2013-4-Post-Installation Tasks
  4. 一步一步学Ruby(二十一):文件操作2
  5. python用for循环求10的因数_python for循环练习(初级)
  6. MyBatis Generator 生成器把其他数据库的同名表生成下来的问题
  7. PHP | Uploading and reading of files and database 【PHP | 文件的上传和读取与数据库】
  8. MaintainableCSS 《可维护性 CSS》 --- 模板篇
  9. js(jQuery)获取时间的方法及常用时间类
  10. centos6.4下安装jdk