【发布时间】:2008-09-16 20:04:53
【问题描述】:
我有 VS2005,目前正在尝试调试 ASP.net Web 应用程序。我想在文件后面的代码中更改一些代码,但每次我停在断点并尝试编辑某些内容时,我都会收到以下错误消息:“当调试器已附加到已运行的进程时,不允许更改或者被调试的代码被优化了。”
我很确定我已启用所有“编辑并继续”选项。有什么建议吗?
【问题讨论】:
我有 VS2005,目前正在尝试调试 ASP.net Web 应用程序。我想在文件后面的代码中更改一些代码,但每次我停在断点并尝试编辑某些内容时,我都会收到以下错误消息:“当调试器已附加到已运行的进程时,不允许更改或者被调试的代码被优化了。”
我很确定我已启用所有“编辑并继续”选项。有什么建议吗?
【问题讨论】:
这似乎违反直觉,但请关闭编辑并继续。
可能还有另一个“允许我编辑只读文件”或“即使我在调试时也允许我编辑......不是真的!”设置在某个地方,但我没有 2005 年可以查看。
在 2008 年,关闭编辑并继续,您可以在运行时进行编辑(但不会应用这些更改。)
如果您确实想使用编辑并继续,您还必须在项目设置的 web 选项卡上为项目启用它。
【讨论】:
应用程序实际上是在您的代码的编译版本之外运行的。如果您修改它,它必须重新编译它才能使您的更改生效,这意味着它需要将正在运行的版本换成新的编译版本。这是一个相当困难的问题——这就是为什么我认为微软让它不可能做到。更多的是保护您免于认为某些更改实际上并未进行。
【讨论】:
对于 Asp.net,可以考虑两种类型的“编辑和继续”。
一个是经典的编辑和刷新浏览器。这是有效的,因为浏览器刷新会重新编译除文件后面的预编译代码之外的所有内容。这不称为“编辑并继续”,尽管在实践中它提供了类似的效果。在这种模式下,您无法更改文件背后的代码,因为它们已经过预编译和部署,但您几乎可以更改任何其他内容。
另一种模式允许您更改文件后面的预编译代码,但仅此而已......(这是 Chris Bilson 提到的模式,需要在 ASP.Net 的项目属性中设置)。在这种情况下,您使用的是调试器的“编辑并继续”功能,它对 ASP.net 知之甚少。调试器只看到一个加载的 .Net 程序集,并且可以在调试器中停止时对其进行修改,因为解决方案中有一个项目声称知道如何构建它。在这种情况下,您将无法修改否则会弄乱调试会话的内容。但是,此方法是在代码运行时更改代码而不需要刷新浏览器的唯一方法。
【讨论】:
您可以在 *.aspx 文件运行时对其进行更改,并且您可以在您的 Web 实例上点击刷新以立即查看这些更改。但是,您不能在程序运行时更改*.cs/*.vb 或*.designer.cs/*.designer.vb 文件。
【讨论】:
我在 Visual Studio 2008 WAP(Web 应用程序项目)上搜索这个,我花了两天时间才找到解决方案,所以在这里希望它可以帮助其他人:
有两个地方要勾选,一个在tools-options-debugging-Edit And Continue-Enable Edit And Continue下,另一个是右键project-properties-Web-Enable Edit And Continue
【讨论】:
作为记录,我在 VS 2008 上遇到了类似的问题,而另一个解决方案为我解决了这个问题。 Editing code in Visual Studio 2008 in debug mode
【讨论】:
检查您是否处于发布模式。 在发布模式下,您无法在调试时编辑代码。只需将模式更改为调试
【讨论】: