如何让.NET 6.0 Hot Reload在Hello World控制台应用中正常运行?
问题原因
- 你当前的所有逻辑都写在顶级语句对应的
Main方法中,整个程序的运行周期内Main方法只会执行一次。Hot Reload对方法内部代码的修改,默认只会在方法下次被调用时生效,已经处于运行状态的Main方法会持续使用修改前的逻辑。 - 代码中的循环全程同步阻塞执行,程序始终卡在
Main方法的循环内部,没有机会触发新的方法调用加载修改后的代码,因此修改不会生效。Edit and Continue可以生效是因为中断模式下调试器会强行替换当前执行上下文的代码,和Hot Reload的运行时注入逻辑存在差异。
解决方法
把需要修改的业务逻辑抽到单独的方法中,修改后的代码会在方法下一次被调用时自动生效,参考调整后的代码:
// See https://aka.ms/new-console-template for more information foreach (int _ in Enumerable.Range(0, 100)) { PrintGreeting(); Task.Delay(1000).Wait(); } void PrintGreeting() { Console.WriteLine("Hello, World!"); }
调整后修改PrintGreeting方法内的输出内容,点击Hot Reload之后,下一次循环调用该方法就会输出修改后的内容。
额外验证项
- 确认项目文件的
PropertyGroup节点中存在<HotReloadEnabled>true</HotReloadEnabled>配置,没有手动禁用Hot Reload功能。 - 调试模式下不要开启原生代码调试等特殊调试选项,这类选项会导致Hot Reload失效。
内容的提问来源于stack exchange,提问作者Konrad Jamrozik
相关产品推荐
相关产品推荐

