为什么我无法在Visual Studio中调试ASP.NET网站?

21

我曾经能够附加到我的w3wp进程并调试我的Web应用程序,但现在无法使用。我不知道是什么改变导致了这一点。我使用的是Visual Studio 2008 SP1。我在IIS中进行调试,而不是使用ASP.NET自己的服务器(即我没有运行项目,我只需附加到正在运行的进程(w3wp)

我的断点简单地显示“断点当前不会被命中。源代码与原始版本不同。”

我尝试过:

  • 清理解决方案。
  • 重建解决方案。
  • 确保我的web.config文件中编译debug=true。
  • 删除bin文件夹
  • 重新启动Visual Studio
  • 重新启动IIS
  • 重新启动电脑
  • 添加一个简单的Response.Write以确保使用最新的DLL。已经使用了。
  • 确保在我的项目属性中检查了Debug ASP.NET。已经选择。
  • 确保在我的构建配置中编译了所有项目。已经选择。

但是这些都没有帮助。我附加到w3wp,但我的断点永远不会被命中。

有任何想法吗?


我猜你是在IIS中调试,而不是在Visual Studio中使用内置的asp.net服务器?另外,请告诉我VS版本。 - user1228
我正在使用VS2008 SP1,并且是在调试IIS。 (在问题中进行了澄清)。 - willem
16个回答

11

最近我遇到了这个问题,最后我确保系统中没有正在运行的Visual Studio。

然后进入这个文件夹并删除其所有内容:

C:\windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\

8
检查您的web.config文件。
<compilation debug="true">...

他说他以前能做到,所以他一定已经设置好了 :) - HoKy22

3
当您“附加到进程”时,“输出”窗口应显示您正在加载的所有库(从“调试”中显示输出),以及它们的加载位置-对于/bin文件夹中的dll,这些通常会复制到\Temporary ASP.NET Files\root\文件夹中-您的dll文件是从哪里读取的?您是否确保已从那里清除它们?
我能想到的唯一其他事情是:
1. 您使用“解决方案配置”下拉菜单中的“发布”模式而不是“调试”模式来编译代码(不是web.config)。
2. /bin文件夹中缺少符号文件(.pdb)。
在项目属性的"生成"选项卡上,你处于"Active(Debug)"配置中,你没有勾选"优化代码"吗?
如果你在该选项卡上点击"高级...",那么"调试信息"栏中的值是多少?是"full"还是"none"?
回应评论:
如果您的代码是在"发布"模式下编译的,您将发现调试会更加困难,并且当您未在更改后重新构建符号(.pdb文件)时,您经常会看到"源代码不同"的消息-但是您说您已经进行了清理/重建,所以应该可以解决这个问题。
是的,您的输出窗口将显示您引用的所有框架dll以及您的代码-但您应该在其中看到列出了每个项目输出文件的一个文件名-那些是要查看的文件。
您是否有一些后构建事件将文件移动到正确的站点目录中,但却失败了?

谢谢,肯定有一些值得考虑的好点子 :) 我已经以发布模式编译了我的代码。我的符号文件在我的\bin文件夹中。 "优化代码"未选中。调试信息是“完整的”。唯一仍然让人困惑的是哪些文件应该显示在我的“调试输出”窗口中。那里有很多文件 :/ - willem
没有后置构建事件。我真的很困惑 :/ - willem
当您使用“调试”模式编译代码时,您能够成功进行调试吗? - Zhaph - Ben Duguid
好的,只有你最初的评论说“我已经在发布模式下编译了我的代码”。 - Zhaph - Ben Duguid
@Zhaph-BenDuguid 对我来说,我没有在\Temporary ASP.NET Files位置看到我的dll文件。我需要做些什么吗? - Linoy

3

我也遇到了这个问题,在“附加到进程”对话框中将“附加到”的代码类型更改为自动即可解决。 (以前我将其设置为“Silverlight Code”,因为要调试另一个进程...很容易忘记将其改回来。)


1
天啊,我因为这个问题快要疯了。非常感谢您!在此之前,我一直在调试本地代码,如果不手动更改此属性,它就永远不会改变。 - cah1r
当您附加时,如果托管模块尚未加载,则也可能遇到该问题的变体。然后,自动调试类型设置为本机。一旦加载了托管模块,因为调试模式设置为本机,符号加载将被跳过。您还可以分离并重新附加。由于现在加载了托管模块,自动调试类型选择将自动更正为混合模式托管。 - David Burg

2
我知道这个问题已经存在了一段时间,但我认为我的经历与之相同:
我无法调试我的.aspx服务器端代码。我有一个正常工作的WepApp AnyCPU项目,我想链接到一些x86的dll,所以我创建了一个x86的调试目标。做了类似的事情,重新构建,停止开发Web服务器,重启,清除临时文件,但都没有效果。
通过将目标文件夹更改为bin\(原来是bin\x86\Debug),解决了问题。

我也遇到了同样的问题,通过将目标文件夹更改为bin\来解决了这个问题。我正在尝试调试一个Web服务。要查看您的文件是否已正确加载,请使用模块窗口(VS菜单->调试->窗口->模块),项目的优化列需要为“否”。 - Damian Vogel

1

你用这个属性查看了你的assembly.cs文件吗?

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.Default)]

在优化代码后,您可能会得到这个结果。因此,您必须将其删除以便再次进行调试。


1
我遇到了相同的问题。w3wp进程占用了很多内存,并且在Web应用程序发布时不想被重置。

按Ctrl + Alt + Delete键>转到“进程”选项卡>找到w3wp进程并终止它。再次运行应用程序(如果这是mvc应用程序,请转到相关网址以自动重新创建w3wp进程)。

然后警告就会消失。

1

您是否运行了任何可能影响此问题的插件?或者使用了任何工具对源代码应用后构建操作,导致您开始调试的DLL已经在构建后被修改,实际上它不是相同的源代码,因此调试无法正常工作?

另外,您尝试过重置VS吗?

devenv.exe /resetsettings

编辑:如果这些信息都没有帮助到您,虽然很痛苦,但卸载并重新安装VS和SP1可能是值得的。如果您完成此操作后问题仍然存在,那么至少可以确定问题出现在web.config或项目设置中。


1
我已经尝试了以下所有选项,我的 Visual Studio 2013 Update 4。
  1. 重置 IIS
  2. 清理解决方案并重新构建
  3. 从临时文件夹中删除文件 C:\ Windows \ Microsoft.Net \ Framework ... \ Temporary ASP.NET 文件
  4. 检查编译标记是否为调试模式
但它们都没有起作用,这里我列出了两个对我有用的东西。
  1. 禁用“仅我的代码”选项 工具 ->选项 ->调试 ->常规 ->取消选中启用“仅我的代码”。
  2. 编辑 web.config 文件并保存(您可以在 web.config 中的任何行中创建空格即可)
请注意,此解决方案可能与 Visual Studio 版本特定相关,而这两个修复程序对我在 Visual Studio 2013 Update 4 中有效。

0

将此代码添加到您的 .csproj 文件中

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <Optimize>false</Optimize>
    <DebugType>full</DebugType>
    <DebugSymbols>true</DebugSymbols>
  </PropertyGroup>

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