今天,我们很高兴的向您介绍 Visual Studio 2019 版本 16.11(预览版 1)和 .NET 6 中的 dotnet watch 命令行工具(预览版 4)中的 .NET 热重载体验的可用性。在本博文,我们希望借此机会向您介绍什么是 .NET 热重载、如何开始使用此功能、我们对未来计划改进的愿景是什么,以及明确当前支持的编辑类型和语言。

什么是 .NET 热重载?

借助热重载,您现在可以在应用程序运行时修改应用程序托管的源代码,而无需手动暂停或点击断点。只需在应用运行时进行受支持的更改,在我们全新的 Visual Studio 体验中,使用“应用代码更改”按钮即可应用您的编辑。

热重载适用于您现有和即将推出的许多项目类型,例如 WPF、Windows 窗体、.NET MAUI 预览、ASP.NET Core 应用程序后台代码、控制台应用程序、WinUI 3(需要托管调试器)等等。这种支持非常广泛,具有使用任何由 .NET Framework 或 CoreCLR 运行时提供支持的项目的核心经验。

使用 热重载,我们的目标是无论您喜欢以何种方式启动应用程序,都可以提供这种体验。在今天的版本中,您现在可以通过完全集成的 Visual Studio 调试器体验或 dotnet watch 命令行工具来使用这种体验,更多选项将在以后的版本中提供。

入门

首先,您可以选择使用 Visual Studio 的最新预览版或我们的 .NET 6 Preview 4,说明如下。

Visual Studio:

要在使用调试器时在 Visual Studio 中尝试热重载:

•下载并安装 Visual Studio 2019 版本 16.11 预览版 1

•打开支持的项目类型,例如 WPF 应用

•通过 F5 连接调试器启动应用程序(确保在调试器设置/调试启动配置文件中禁用“启用本机代码调试”)

•打开包含一些代码的 C# 代码文件,这些代码可以通过正在运行的应用程序用户界面(例如:按钮的后台代码或 ViewModel 的命令)或通过计时器每隔一段时间触发的代码重新执行并更改代码

•使用 Visual Studio 工具栏中的新应用代码更改 (ALT-F10) 按钮(在“继续”按钮旁边)应用代码更改。请注意,使用 Visual Studio 时不需要保存文件,这使您可以灵活地快速更改代码并继续前进。

如果您所做的更改得到支持,您的应用程序现在将在使用新逻辑运行时进行修补,并且您应该在下一次通过您的操作或类似触发代码的计时器重新执行更新的代码时看到应用程序行为中的更改。

您还可以继续使用其他调试器功能,例如断点、编辑并继续、XAML 热重载等。您今天使用的所有功能都应该与 .NET 热重载完全并行工作。如果有什么不适合您,请告诉我们!

命令行界面

要在使用 dotnet watch 启动应用程序时从命令行尝试热重载:

  • 安装 .NET 6 预览版 4
  • 将现有的ASP.NET核心项目更新为目标.NET 6
  • 将“hotReloadProfile”:“aspnetcore”属性添加到launchSettings.json 中的应用启动配置文件。

Properties/launchSettings.json 示例:

{
"profiles": {
"dotnet": {
"commandName": "Project",
"hotReloadProfile": "aspnetcore"
}
}
}
  • 使用 dotnet watch 运行项目并查看输出,因为它应该表明启用了热重载
  • 对您的应用程序管理的源代码进行受支持的代码更改并保存文件以应用

    就像在 Visual Studio 体验中一样,您现在应该应用新逻辑,下次重新执行更新的代码时,您应该会看到应用程序行为的变化。

您还可以通过修改“blazorwasm”热重载配置文件并按照上述类似步骤将这种方法用于您的 Blazor WebAssembly 项目。您甚至可以使用 Windows 窗体或由 CoreCLR 提供支持的其他类型的项目来尝试它,只需在 Properties 文件夹下手动添加一个名为 launchSettings.json 的文件,其中包含上述示例内容。

这种体验仍在开发中,我们正在跟踪未来的改进,这将使使用 dotnet watch 更容易地在没有 launchSettings.json 文件的情况下热重载所有类型的 .NET Core 应用程序,但这是当前版本中的一个限制。

Visual Studio 2022 和 .NET 6 中的最佳

在今天的发布中,这只是我们对 .NET 开发人员的热重载的完整愿景的预览。虽然在早期的 .NET 6 预览版和 Visual Studio 2019 中提供了一些功能,但为了充分发挥此功能的威力,我们将 .NET 6(以及 .NET 的未来版本)和 Visual Studio 2022 作为一组框架和工具,以获得最完整和优化的体验。

为了让您了解我们计划在未来的预览和最终版本中提供什么类型的功能,以下是一些示例:

  • .NET 多平台应用程序 UI (.NET MAUI):借助 .NET 6 Preview 4,构建 .NET MAUI 应用程序的开发人员现在可以将 .NET Hot Reload 用于面向 WinUI 3 的项目。在未来的版本中,我们将提供 .NET Hot Reload 支持适用于 iOS、Android 和 Mac Catalyst 的 方案。
  • Razor 页面:在未来的版本中,将支持热重载和编辑并继续 (EnC) 来编辑 Razor,用于针对 .NET 6 或更高版本的网站或 Blazor 应用程序
  • Visual Studio 中不需要调试器:在 Visual Studio 2022 的未来版本中,我们正在努力添加对使用热重载的支持,而无需调试器,这意味着开发人员将能够使用 CTRL-F5 启动他们的应用程序,并且仍然可以使用 Hot Reload 进行修补他们正在运行的应用程序
  • 减少不受支持的更改数量:在 Visual Studio 2022 和 .NET 6+ 的未来版本中,我们计划跨多个团队开展工作,以减少运行时不受支持的编辑数量
  • 优化框架以最好地与热重载配合使用:在 .NET 6 中,我们正在研究如何改进某些框架以更好地支持热重载。未来的示例将包括对 ASP.NET Core、.NET MAUI 和其他框架的改进,其中的调整和优化将使热重载更改在更多情况下更有用。

    虽然以上是我们目前的计划,但请注意,计划可能会根据客户的反馈和时间表而变化。

支持/不支持的更改和语言

无论您如何使用 .NET热重载,请注意某些更改在运行时不受支持,并将以rude的编辑对话框提示您,并要求您重新启动应用程序才能应用。我们仍在研究该功能和文档,以详细说明支持哪些编辑。现在,首先回顾一下我们现有的“编辑并继续"(EnC)等效功能列表。由于热重载由 EnC 提供支持,这将为您提供一个很好的起点,以便更好地理解这一新功能。有关详细信息,请参阅:EnC 文档。

此外,虽然上面的例子特别提到了 C#,但在 Visual Studio 的调试器下运行时,Visual Basic 也支持各种情况。 .NET 6 目前不支持 F#,但我们计划在未来的版本中根据客户反馈提供支持。

您的反馈很重要

在这个早期的预览版本中,我们承认会有错误。有时,如果您尝试应用更改,它可能会默默地失败,或者您的应用程序可能会崩溃等。如果您确实遇到任何问题,请花点时间向我们报告问题,因为只有通过您的反馈,我们才能确保关键问题得到解决得到解决,未来的决策将根据您的输入进行优先排序。

要联系我们,请使用 Visual Studio 反馈机制 或者在微软Q&A论坛上提问任何有关开发的问题。

最新的.NET 热重载介绍的更多相关文章

  1. 【译】在运行时编辑代码的 .NET 热重载

    今天,我们很高兴向你介绍 Visual Studio 2019 中 16.11(预览版1)中的 .NET 热重载(通过 .NET 6(预览版4)中的 dotnet watch 命令行工具).在这篇文章 ...

  2. ASP.NET Core 6.0对热重载的支持

    .NET 热重载技术支持将代码更改(包括对样式表的更改)实时应用到正在运行的程序中,不需要重启应用,也不会丢失应用状态. 一.整体介绍 目前 ASP.NET Core 6.0 项目都支持热重载.在以下 ...

  3. KSFramework:集成U3D热重载框架 - README

    KSFramework KEngine + SLua+ Framework = KSFramework KSFramework是一个整合KEngine.SLua的Unity 5开发框架,并为程序.美术 ...

  4. .Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置

    1. 前言 在提倡微服务及 Serverless 越来越普及的当下,在 .Net Core 之前,.Net 应用的配置模式往往依赖于一个名为 web.config 的 XML 文件,耦合性高,而可扩展 ...

  5. webpack之带有可自动打开浏览器及热重载的基本配置

    什么是Webpack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并 ...

  6. Xcode辅助工具之热重载插件利器

    该博客首发于github.io 2018-06-13 13:43:44 文章最新修改于: 2019-03-31 13:47:20 昨天刚刚看完iOSTips微信公众号推送的文章, Injection: ...

  7. GO学习-(37) 使用Air实现Go程序实时热重载

    使用Air实现Go程序实时热重载 今天我们要介绍一个神器--Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率. 为什么需要实时加载? 之前使用P ...

  8. KSFramework常见问题:Lua脚本热重载,内存状态数据丢失?

    Lua热重载 内存数据在重载后会丢失 KSFramework中,所有的UI Lua脚本是可以重载的.脚本中的一些内存数据,在重载后会丢失,比如: -- 记录一个UI界面被打开了多少次 function ...

  9. webpack使用webpack-dev-middleware进行热重载

    新手,刚开始学习webpack,想使用webdevserver,但定制性太差,于是研究了一下使用webpack-dev-middleware进行指定. 根据文档https://www.npmjs.co ...

随机推荐

  1. Java EnumMap 实现类

    EnumMap 实现类 因为 HashMap 是一种通过对 key 计算 hashCode(),通过空间换时间的方式,直接定位到 value 所在的内部数组的索引,因此,查找效率非常高. 如果作为 k ...

  2. Java public 和 private 访问修饰符

    何为封装 从事面向对象编程的 Java 程序员,不可能不知道封装,它是面向对象编程的精髓,非常重要. 那什么是封装?字面意思就是把摆在外面的东西包起来. 一句话,封装就是对外隐藏内部细节. 那为何要封 ...

  3. Lua _G

    1.全局变量的原形 在Lua中,要声明全局变量很简单,那就是定义变量的时候,前面不要加上local. 这个神秘的全局变量,其实本质上也是一个table,它把我们创建的全局变量都保存到一个table里了 ...

  4. 大数据开发-Flink-窗口全解析

    Flink窗口背景 Flink认为Batch是Streaming的一个特例,因此Flink底层引擎是一个流式引擎,在上面实现了流处理和批处理.而Window就是从Streaming到Batch的桥梁. ...

  5. macOS Big Sur 11.4 (20F71) 正式版(DMG、ISO、IPSW),百度网盘下载

    本站提供的 macOS Big Sur 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装. 请访问原文链接:https://sy ...

  6. python解析ua

    一个非常神奇的包可以帮助我们优雅的解析浏览器的UA,他的名字叫做user_agents pip install pyyaml ua-parser user-agents >>>ua_ ...

  7. SystemML大规模机器学习,优化算子融合方案的研究

    SystemML大规模机器学习,优化算子融合方案的研究 摘要 许多大规模机器学习(ML)系统允许通过线性代数程序指定定制的ML算法,然后自动生成有效的执行计划.在这种情况下,优化的机会融合基本算子的熔 ...

  8. NeuWare软件开发环境

    NeuWare软件开发环境 NeuWare 全面支持各类主流编程框架(如TensorFlow,Caffe,Caffe2,MXNet和ONNX等).用户可面向上述编程框架,便捷地在MLU100上开发和部 ...

  9. NVIDIA GPU的神经网络自动调度

    NVIDIA GPU的神经网络自动调度 针对特定设备和工作负载的自动调整对于获得最佳性能至关重要.这是一个关于如何使用自动调度器为NVIDIA GPU调整整个神经网络的资料. 为了自动调整一个神经网络 ...

  10. java后端知识点梳理——java基础

    面向对象 java三大特性 封装: 将事务封装成一个类,达到解耦,隐藏细节的效果.通过get/set等方法,封装了内部逻辑,并保留了特定的接口与外界联系. 继承: 从一个已知的类中派生出一个新的类,新 ...