无法在Visual Studio 2022上进行热重载

55
我将我的Web应用程序从Visual Studio 2019迁移到2022(预览版7),但即使是像将if(a=b)更改为if(a!=b)这样的小更改,我也无法进行热重新加载。我需要停止调试器,并且我不确定“COMPLUS_ForceENC”环境变量是什么,找不到任何有关它的信息。
当我创建一个新的Web应用程序时,C#和cshtml上的热重新加载非常顺利。
这是在我更改原始应用程序时显示的错误:

Error ENC2004:项目中所做的更改需要重新启动应用程序:当调试器已连接到已运行的进程时,不允许进行更改。在启动进程之前,请考虑设置“COMPLUS_ForceENC”环境变量。


是的,我做了,但我不知道需要多长时间,我只想知道如何设置COMPLUS_ForceENC环境变量,谷歌上没有关于这个变量的信息! - bob mason
当你在谷歌上搜索“COMPLUS_ForceENC”时,会出现很多结果。但这可能并不是解决你问题的方法。 - JHBonarius
2
我刚刚安装了2022 RTM,当我进行一个非常简单的代码更改时,在.NET Core 3.1 Web API项目中出现了这个问题。 - Airn5475
1
在.NET Core 3.1 MVC应用程序中,Cshtml文件的热重载也无法正常工作。 - Amir Zare
3
现在官方版本已经发布,但我仍然遇到同样的问题。有人已经报告了这个问题吗?我们可以关注哪个页面来获得更多信息? - Baz Guvenkaya
显示剩余2条评论
20个回答

42

我曾经认为VS的热重载功能失灵了,但实际上是由于尝试同时调试(F5)和热重载导致的。对于blazor应用程序,热重载图标enter image description here根本不起作用。

解决方案相当简单。应该使用无调试模式(Ctrl+F5)启动应用程序enter image description here

此后热重载正常工作。


5
确实。我正在构建一个托管在ASP.NET Core中的Blazor Wasm应用程序,即使使用CTRL-F5,HOT RELOAD也根本无法工作。 Microsoft Visual Studio Community 2022(64位)版本17.0.5。 - Marc Roussel
我在一个Web项目中进行了这项工作。由于我已经进行了20年的Control F5调试,几乎放弃了它...这解决了Visual Studio中热重载不起作用的问题,因为我是通过IIS/IIS Express运行的。 - hanzolo
28
微软是如何认为这是可行的?我想要热重载几乎唯一的原因是在调试时发现了问题并进行修复。如果无法进行调试和热重载,那么这有什么用处呢? - Ryan D

26

可能有点晚了,但今天调试时遇到这个问题,每次执行下一条语句都会抛出这个问题,让我非常烦恼。

对我来说解决方案是:

  1. 点击工具栏中的热重载图标,然后从图标的上下文菜单中选择“设置”(或通过工具 > 设置 > 调试访问)
  2. 禁用“在调试时启用热重载和编辑继续”

enter image description here

很遗憾,我无法在调试时让热重载正常工作,但这对我并不是真正的问题。


3
我曾遇到同样的问题。只是通过调试器一步一步执行程序就出现了错误信息!关闭此功能后问题得到解决。 - Brandon Tull
@BrandonTull 我也遇到了同样的问题,只是在调试时按F10进行单步执行就会出现这个消息,这太疯狂了,显然是一个明显的错误。一旦我重新启动了Visual Studio,这个问题就消失了。 - Yogurtu
3
热重载在调试模式下一直很好用,但现在突然失效了,我不知道发生了什么变化。只能在没有调试的情况下使用它,这样非常无用。 - Grault
2
目前使用的是VS 17.4.5,这些选项已被勾选并禁用。在调试时,热重载仍然完全无法工作。 - Marc Roussel
@marc-roussel 我也看到了那些选项被禁用了(VS 17.5.0),但后来意识到我开启了调试器。一旦我停止了调试器,我就能够修改(例如禁用)那些复选框了。 - Nevermore
2
最好的解决方法是关闭那个垃圾。它会随机出现问题,重新构建没有帮助,只有重新启动Windows。将近1年过去了,微软还是没有修复。 - CodeMonkey

7
首先,热重载应该适用于Ctrl + F5F5调试,所以接受的答案是错误的。
在我的情况下,热重载无法工作,因为我的调试配置命名与"Debug"不同,它被命名为"LocalDebug"(但我确实正确设置了所有设置)。
这里有一个MS的github问题:https://github.com/dotnet/aspnetcore/issues/43910

这仍然解决了在2023年Visual Studio 2022 17.8中的问题 - 荒谬 - undefined
+1 所以在阅读完这个之后,我将 appsettings.Development.json 改为了 appsettings.Debug.json,与我的配置管理器中的名称(Debug)相匹配。 - undefined

7

可能只是巧合,但从17.0.1升级到17.0.2后,它开始工作了。奇怪的是,更新日志中没有提到这样的错误修复。尝试更新到最新版本。

更新 似乎我只在我的新.NET 6项目上使其工作。在迁移到.NET 6的旧项目中,仍然会出现这种情况。也许在未完全迁移到.NET 6并仍使用旧的startup.cs文件的项目中,不会正确工作。在调试模式下,更新通知出现,但内容在浏览器刷新之前不会更改。如果不在调试模式下,刷新浏览器不起作用。

更新2 发现在新的.net 6 Asp.net Web页面项目中,如果我更改 .razor 文件,则热重载功能正常工作,但对于 .cshtml 文件,我需要刷新浏览器才能看到更改。我同时使用razor页面+ Blazor在同一个项目中,因此有两种文件类型。

如果尝试创建 .Net 6 Blazor 项目,我几乎确定热重载将正常工作。

更新3 我现在在Dotnet Github上开了个问题。您可以在那里跟进问题。github.com/dotnet/aspnetcore/issues/38809


1
谢谢,那正是我的问题!我不确定缺少什么或如何“完全迁移到” .Net6! - bob mason
我的问题在更新从17.0.0到17.0.2之后得以解决。这就是那些破坏火箭的bug! - Ayub
1
我现在已经在Dotnet Github上开了一个问题。你可以在那里关注这个问题。 https://github.com/dotnet/aspnetcore/issues/38809 - Hugo A.
1
Blazor WASM 热重载不起作用 - 在 VS Code 和 VS2022 上进行了广泛测试,使用的是 .net 6.0.100。 - Greg
@Greg 没有测试过,但你应该在我在 Github 上开的问题中发布这个。他们应该知道这件事。 - Hugo A.
显示剩余3条评论

4
在我的情况下,我犯了一个愚蠢的错误,试图在发布配置下进行应用程序的热重载。确保它是调试:) enter image description here

4

对我来说,Visual Studio 2022 GA版本也无法工作 :( 看起来我不是唯一一个遇到这个问题的人,我注意到我的热重载功能图标与微软宣传视频中显示的不同,我的是火焰,而工作版本似乎有两个组成圆形的火焰:(

我找到了这篇文章

*在Visual Studio 2022 GA版本中,当使用Visual Studio调试器时,Blazor WebAssembly的Hot Reload支持尚未启用。 如果您通过Visual Studio启动应用程序而没有调试器,则仍然可以获取Hot Reload,并且我们正在努力解决这个问题, 在下一个Visual Studio更新中。

如果我启动程序而没有附加调试器,则具有Hot Reload,或者我可以在没有Hot Reload的情况下使用调试器运行应用程序,这符合上面链接的文章的预期,但是发布会非常误导人,因为他们从未提到这一点,也没有展示在演示中按下哪个按钮启动具有热重载的blazor webasm...无论如何,他们没有展示调试器和热重载在Blazor WebAssembly中一起工作,所以看起来这都是我们自己想象的 :( ... 我们需要等待。


1
这非常具有误导性 - 展示了 Blazor 服务器端热重载工作的视频,但没有说这在 wasm 上不起作用。我在此上浪费了很多时间,并在预览版本和发布版本中提交了5个不同的错误解释。不再浪费时间了 - 这只是一个巨大的时间浪费。 - Greg

2
在我的情况下,这是因为我已经禁用了 Razor 源代码生成器 <UseRazorSourceGenerator>false</UseRazorSourceGenerator>.csproj 文件中。将其设置回 true 可以解决这个问题。

这在我的多个项目中多次成功,谢谢! - Ruina

2

我知道这可能是大多数人尝试的第一件事情之一,但我刚刚重新启动了Visual Studio,然后它又可以工作了。


2
在解决另一个问题时,我启用了项目中的本地调试,导致了这个问题。禁用后,我可以进行热重载。

https://www.technipages.com/visual-studio-native-code-debugging

使用您的项目,选择“项目”选项卡,然后选择“应用程序名称属性...”。
在左侧窗格中选择“调试”。
选中“启用本机代码调试”框以启用它。取消选中以禁用它。
(强调我的)

1
在我使用的VS2022 Windows Forms .Net Framework 4.8应用程序中有效。 - undefined

1
在我的情况下,这是因为我没有在我的launchSettings.json文件中使用hotReloadProfile
"IIS Express": {
    "commandName": "IISExpress",
    "hotReloadProfile": "aspnetcore", 
    "launchBrowser": true,
    "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接