编辑并继续:“......时不允许更改”

时间:2009-06-18 00:40:09

标签: visual-studio visual-studio-2008 edit-and-continue

即使我创建一个干净的WinForms项目,编辑并继续不起作用并给我错误:

  

当调试器已附加到已运行的进程或正在调试的代码在构建或运行时进行了优化时,不允许进行更改。

    在工具→选项→调试中选中
  1. 编辑并继续选项。
  2. 未启用优化。
  3. 似乎没有设置任何托管分析器。
  4. 我在调试模式下运行
  5. 我在x64 CPU和Windows XP 32位上运行,但是将平台目标设置为x86而不是AnyCpu没有帮助。
  6. 修复Visual Studio安装没有帮助。
  7. 我还在MSDN网站上找到了this article

      

    不支持的方案

         

    在以下调试方案中无法使用“编辑并继续”:

         
        
    • 在Windows 98上进行调试。

    •   
    • 混合模式(本机/托管)调试。

    •   
    • SQL调试。

    •   
    • 调试Dr. Watson转储。

    •   
    • 在未处理的异常之后编辑代码,此时未选中“在未处理的异常上展开调用堆栈”选项。

    •   
    • 调试嵌入式运行时应用程序。

    •   
    • 使用“附加到”调试应用程序,而不是使用“调试”菜单中的“开始”运行应用程序。

    •   
    • 调试优化代码。

    •   
    • 当目标是64位应用程序时调试托管代码。如果要使用“编辑并继续”,则必须将目标设置为x86。 (项目属性,编译选项卡,高级编译器设置。)。

    •   
    • 在由于构建错误而无法构建新版本后调试旧版本的代码。

    •   

    但我可以对此列表中的每个项目回答“否”。

    之前有效,但几天前它停止了工作,我不知道可能是什么原因。

34 个答案:

答案 0 :(得分:55)

适用的解决方案

以下是一个不完整的无序列表,如果您想要快速修改编辑和继续,可以尝试使用

  • 确保您处于调试模式
  • 确保您未启动混合模式流程
  • 尝试将CPU目标设置为 x86 而不是 AnyCPU (在x64计算机上)
  • 取消选中项目属性 - >调试
  • 调试模式优化代码复选框
  • 高级编译器设置中取消选中启用优化
  • (ASP.NET)检查nightcoder's answer是否是这种情况
  • (ASP.NET)检查this answer (by matrixugly)是否是这种情况
  • (ASP.NET)确保在 Web 选项卡上启用编辑并继续(vs2010)
  • (ASP.NET)转到属性>网络>服务器,并确保在使用Visual Studio开发服务器下检查启用并继续
  • (ASP.NET WebAPI)在尝试编辑之前,请确保您已使用断点在Controller的方法中停止。
  • 转到工具>选项>调试>一般并确保要求源文件与原始版本完全匹配未选中。
  • 您使用的是Microsoft Fakes吗?它抑制了Edit&继续。
  • 通过在任务管理器中选择结束进程树,终止所有 *。vshost.exe 实例。 VS将重新生成正确的实例。
  • 使用 Debug->删除所有断点
  • 删除所有断点 工具>中都存在
  • 启用并继续选项>调试菜单以及项目设置。一定要检查两个地方。编辑&扩展的Intellitrace设置不支持继续。
  • 确保项目属性>中的调试信息构建>高级>输出>调试信息设置为完整
  • 某些插件可能会干扰。通过禁用/卸载进行检查,然后再次尝试其他解决方案。
  • 如果您没有给予足够的重视,那么您在尝试解决此问题时遇到的错误可能会更改为更容易诊断的其他错误。例如。包含lambda表达式的方法不支持编辑并继续。
  • 确保系统变量COR_ENABLE_PROFILING未设置为1。有些分析器在安装时设置了这个,并在卸载后保留它。打开命令提示符并键入set以快速检查系统是否受到影响,如果是,请删除变量或将其设置为0

    • 在Windows 8及更高版本中,搜索系统(控制面板)。
    • 点击高级系统设置链接。
    • 点击环境变量
    • 删除COR_ENABLE_PROFILING
  • 请注意unsupported scenarios(如问题中所述)和unsupported edits

* by' you',我的意思是页面的访问者正在敲击键盘以找到解决方案。

如果您有其他提示,请随时编辑此答案!

答案 1 :(得分:23)

如果您正在调试ASP.NET应用程序,请转到属性>网络>服务器,并确保在“使用Visual Studio开发服务器”下选中“启用并继续”。

答案 2 :(得分:17)

我终于解决了这个问题:卸载Gallio

Gallio似乎有相当多的粗糙边缘,最好不使用MbUnit 3.0但是使用MbUnit 2.0框架但使用gallio runner,你运行时没有从安装程序安装(它还安装了visual studio插件)

顺便说一下,即使在“禁用”Gallio插件之后,我也遇到了这个问题。只有卸载解决了这个问题。

<强> PS。由nightcoder编辑:
在我的情况下禁用TypeMock Isolator (模拟框架)终于帮助!编辑&amp;现在继续工作!!!

以下是TypeMock支持的答案:

  

进一步观察编辑后   并继续发行和交谈   与微软有关,我们达成了   结论无法解决   用于隔离器。隔离器实现了一个   CLR分析器,并根据我们的   研究,曾经是CLR剖析器   启用和附加,编辑和   继续自动禁用。   我很遗憾地说这已经不在了   被认为是一个错误,而是一个   隔离器的限制。

答案 3 :(得分:9)

我遇到了同样的问题。我甚至重新安装了VS 2008,但问题并没有消失。但是,当我删除所有断点时,它开始工作。

Debug->Delete All Breakpoints

我认为这是因为我删除了一个在其代码中有断点的aspx页面,然后我创建了另一个具有相同名称的页面。这可能使VS 2008感到困惑。

答案 4 :(得分:4)

如果您对ASP.NET应用程序感兴趣,请确保您已在Web选项卡上进行编辑并继续启用(vs2010)。在早期版本中还有一个单独的ASP.NET调试设置。

此致

亚当。

答案 5 :(得分:4)

要检查的事情

  • 确保您的编译设置为Debug vs. Release
  • 确保您没有启动混合模式流程
  • 如果在64位计算机上确保将CPU目标设置为x86而不是AnyCPU

编辑

我认为这不重要,但要确保为目标平台启用了托管过程。可能无济于事。

如果它为新项目重新编写,那么它可能会更加微妙。我会尝试以下方法。

  • 备份HKCU:\ Software \ Wow6432Node \ VisualStudio \ 9.0(可能只是重命名)
  • 删除相同的密钥
  • 再次尝试再版

答案 6 :(得分:4)

拍摄后帮助我使用VS2010:

转到工具,选项,调试,常规并确保未选中“要求源文件与原始版本完全匹配”。

答案 7 :(得分:4)

此问题是由Intellitrace设置

引起的

如果启用了Intellitrace,请确保仅选中Intellitrace事件

否则这将不允许编辑并继续..

如果您点击Intellitrace选项,您将看到警告。

答案 8 :(得分:4)

我发现即使在项目属性下构建&amp;调试选项卡设置为调试,所有其他设置都是正确的我仍然得到消息,但是在挖掘更多之后 在Build菜单下选择Configurations Manager ...并确保在两个地方也选择Debug。去图......他们需要多少个不同的地方来设置调试??????即使您将项目 - 配置设置为调试,然后在构建 - 管理器下它没有更改,所以你也改变了相同的设置项目配置 - 似乎再次是一个微软问题.......

答案 9 :(得分:4)

以上解决方案均不适合我(在64x机器上运行)。

最后,我点击了'advanced compiler settings' UNCHECKED 'enable optimizations',现在我可以在调试时逐步执行代码并进行编辑。

答案 10 :(得分:3)

“编辑并继续”,启用后,只允许您在处于中断模式时编辑代码:例如通过异常或命中断点暂停执行。

这意味着当执行未暂停时,无法编辑代码!在调试(ASP.NET)Web项目时,这非常不直观,因为您经常希望在请求之间进行更改。此时,你的(可能)调试代码没有运行,但它也没有暂停!
要解决此问题,您可以单击“全部中断”(或按 Ctrl + Alt + 中断)。或者,在某处设置断点(例如,在Page_Load事件中),然后重新加载页面,以便执行在遇到断点时暂停,现在可以编辑代码。甚至是.cs个文件中的代码。

答案 11 :(得分:3)

对于我,由于我不理解的原因,“高级编译器设置”中的“生成调试信息”设置被设置为“仅pdb”而不是“完整”。

默认情况下,此参数始终设置为“Full”,但神秘的恶作剧者在昨晚更改了此参数。 :)

P.S。我在Visual Basic 2010中使用Visual Basic。

答案 12 :(得分:3)

我在Microsoft Visual Studio 2008中遇到此问题,解决方案很简单。当您运行项目时,请在“调试”模式下设置而不是“发布”。另一个人的解决方案很有用。

答案 13 :(得分:2)

当调试器没有遇到断点或者你没有点击Break All(暂停)时会发生这种情况。可能不是那么简单吗?

答案 14 :(得分:1)

我做了所有其他答案中提到的所有更改,但都没有奏效。我学到了什么?工具&gt;中存在启用并继续选项&gt;调试菜单以及项目设置。检查完两者后,启用并继续为我工作。

答案 15 :(得分:1)

对我有用的是取消选中

下的“使用托管兼容模式”
  

工具 - &gt;选项 - &gt;调试

TBN:检查或取消选中“要求源文件与原始版本完全匹配”似乎不会影响E&amp; C

希望这可以提供帮助。

答案 16 :(得分:1)

启用编辑并继续仅运行IIS Express。 不要在本地ISS或外部主机中工作。

答案 17 :(得分:1)

自从我将VS 2019升级到16.4.3之后,我遇到了一个烦人的问题。
最后,我以这种方式解决了这个问题:

1.停止调试
2.从“解决方案资源管理器”中选择解决方案
3.在 Properties 窗口中,将“ Active config” 属性从“ Release | Any CPU” 更改为“ Debug | Any CPU “
4.在“调试”>“选项”>“常规”中,选中“ 编辑并继续”复选框

那对我有用,并希望它对您也有用。

答案 18 :(得分:1)

我今天遇到了这个问题 - 事实证明,将Debug Info设置为pdb-only(或者没有,我想象)会阻止Edit and Continue工作。

确保您的调试信息首先设置为“完整”!

项目属性&gt;构建&gt;高级&gt;输出&gt;调试信息

答案 19 :(得分:1)

我从项目中删除了一个数据集,因为我没有使用它。之后我可以在调试时修改程序。

答案 20 :(得分:1)

有些事情似乎有助于使用VS2010:

  • 转到工具,选项,调试,常规并确保未选中“要求源文件与原始版本完全匹配”。
  • 多个.vshost.exe实例可以从例如从已停止的进程中分离VS调试器。这也会干扰断点和编译。使用“任务管理器”,“进程”选项卡通过右键单击每个实例并选择“结束进程树”来终止.vshost.exe的所有实例。 VS将创建一个新实例。

答案 21 :(得分:1)

如果我创建一个新项目,则在调试时编辑不起作用。如果我创建一个新网站,则在调试工作时进行编辑。

答案 22 :(得分:1)

错误说明可能的原因是:“正在调试的代码在构建或运行时进行了优化”。转到Project Properties-&gt; Debug并取消选中Debug mode的Optimize Code框。

答案 23 :(得分:0)

嵌入interop类型visual studio应该设置为false

答案 24 :(得分:0)

我在链接的类文件中发生过这种情况。项目的其余部分允许E&amp; C,但编辑链接文件时出现同样的错误。解决方案是将链接文件分解为它自己的项目并引用该项目。

答案 25 :(得分:0)

我在解决方案中有一个数据库项目,它阻止了webforms项目的编辑。

我点击了#34;卸载&#34;在数据库项目上,现在一切都很顺利。

答案 26 :(得分:0)

我在Visual Studio 2005中遇到了同样的问题。我的配置是64位。它在VS解决方案之一上工作正常,但在另一个解决方案上没有。我注意到我启用了“启用编辑并继续”项目,我希望在调试模式下进行更改。当我为启动项目选择“启用并继续”时,这终于为我解决了。

除了启用和继续需要之外,没有任何配置更改。

答案 27 :(得分:0)

似乎不合逻辑,但唯一的方法是禁用编辑并继续从VS 2017选项...然后AspNet编辑并继续开始工作......

答案 28 :(得分:0)

在我的情况下,只需重置为默认调试器设置并设置IntelliTrace-&gt;只有intellitrace事件帮助

答案 29 :(得分:0)

对我来说,这是在我遇到断点,进行了一些编辑,然后继续单步执行代码,然后最终按F5或“ Continue”直到结束并退出我的代码块之后发生的。

尝试“删除所有断点”选项(按Ctrl + Shift + PrtScn并在提示符下单击“确定”)并重新生成所有文件后,我的错误日志中仍然存在关于未加载项目的DLL的错误。 ..“无法应用更改,未加载x.DLL”。重新启动Visual Studio之后,一切都很好。对我来说,事实就是这么简单。

这里的其他事情对我不起作用,例如在事情再次开始工作之前和之后检查了“要求源文件必须与原始版本完全匹配”,并且在我的x64机器上定位“任何CPU”都很好,也(不必指定x86或x64)。我在“工具”>“选项”>“调试”以及“项目属性”>““ Web””选项卡设置中启用了“启用编辑并继续”。

答案 30 :(得分:0)

在Rider中遇到了这个问题。我直接打开了.csproj文件,而不是.sln文件。结果是即使单击调试按钮,运行时配置也未设置为调试。您会注意到它在调试按钮旁边的工具栏中显示<No Configurations>

答案 31 :(得分:0)

我添加我的答案是因为尚未明确提及为我解决该问题的方法。实际上帮助我的是这篇文章:

http://www.rubencanton.com/blog/2012/02/how-to-fix-error-changes-are-not-allowed-while-code-is-running-in-net.html

这是该解决方案的简短说明:

  1. 停止运行您的应用。
  2. 转到工具>选项>调试>编辑并继续
  3. 禁用“启用编辑并继续”

请注意这是违反直觉的:我必须禁用(取消选中)“启用编辑并继续”。

这将允许您在编辑器中更改代码,而不会收到消息“代码运行时不允许更改”。

但是请注意,您所做的代码更改将不会反映在您正在运行的程序中-为此,您需要停止并重新启动程序(从我的头上,我认为模板/ ASPX更改的确会得到体现,但不会VB / C#更改,即“代码落后”代码)。

答案 32 :(得分:0)

我安装了stackify,当我在图标托盘上启用它时,它会停止通过编辑进行调试,因此我找到了

  • 关闭视觉工作室,在我的案例中是vs2017
  • 转到图标托盘,然后右键单击stackify图标并禁用.NET Profiler
  • 打开Visual Studio,再次使用调试器在调试模式下运行应用程序,它允许我在调试时进行编辑

see image

答案 33 :(得分:0)

VS2019-ASP.NET表单 就我而言,是工具-选项-Windows窗体设计器-“优化代码生成” <-设置为false