Visual Studio 2013无法触发断点

14
我正在使用Visual Studio 2013开发一个ASP.NET解决方案,但无法命中断点。在其他解决方案上,Visual Studio可以成功地命中断点,而在这个解决方案中,以前的断点工作失败了。我使用的是Visual Studio 2013 Ultimate,更新版本为4。我的操作系统是64位的Windows 8.1。
这是一个包含三个项目的MVC解决方案:BusinessEntities、DataAccessLayer(DAL)和Web项目。在所有这些项目中,断点都无法正常工作。我甚至尝试了在主页控制器的Index ActionResult中设置一个断点,但它仍然无法停在那里。
在Visual Studio的功能区中,解决方案配置设置为Debug。此外,配置管理器显示我所有三个项目都具有Debug配置。重新启动IIS、重新启动Visual Studio和重新启动计算机都没有解决这个问题。选择“生成”>“清理解决方案”,“生成”>“重新生成”,然后“调试”>“开始调试”也无法解决它。
在web.config中,debug在此节点中设置为true:
  <system.web>
      <compilation debug="true" targetFramework="4.0" />

在我的项目的bin目录中有.pdb文件。我验证了当解决方案被清理时它们会被删除,而在重新构建时会被重新创建。
还需要检查什么?我真的需要让断点在这个解决方案中工作。谢谢。

========

2014年12月30日更新 - 以下是我尝试的几件事,根据@paul.abbott.wa.us的评论。为了清晰起见,删除了我发表的一些评论,并将它们追加在这里。

========

我是通过VS启动应用程序,并在IIS下运行它。IIS的版本是8.5。当使用System.Diagnostics.Process.GetCurrentProcess().ProcessName公开进程名称时,它是w3wp。
在IIS中,Web应用程序具有类似“local.mysite”的站点名称,并且在我的hosts文件中有匹配的条目。该站点使用DefaultAppPool,该池使用.NET CLR版本4.0和集成的托管管道模式。我的解决方案中的3个应用程序针对.NET Framework 4。
如果我切换回IIS Express,则调试器开始工作。IIS的版本更改为8.0,进程名称当然是iisexpress。从技术上讲,我不必在我的工作站上在IIS下运行此应用程序,但我更愿意这样做。我在IIS中配置或忽略了什么导致调试器失败?
在属性页面的Web选项卡中审查项目服务器设置时,我注意到下拉菜单被设置为“ IIS Express”。切换到“本地IIS”后,我被提示以管理员身份运行VS。这样做后,我能够将服务器更改为本地IIS,并启动调试器。我提交了更改,关闭了VS,以非管理员身份启动VS,并加载解决方案。网站项目无法加载,显示以下消息:“Web应用程序项目[MySiteName]配置为使用IIS。无法访问IIS元数据库。您没有足够的权限访问计算机上的IIS网站。”
最终,该网站的某些部分将采用Active Directory身份验证。那么,我的解决方案是在IIS Express下运行站点,或者始终以管理员身份运行VS,如果我希望在IIS下运行站点?谢谢。
我找到了一个解决方案,以克服“Web应用程序项目[MyApp]配置为使用IIS。无法访问IIS Metabase。您没有足够的权限访问计算机上的IIS网站。”的错误消息。请按照此帖子中的步骤。错误-无法访问IIS元数据库 在将我的帐户授权访问intetsrv \ config文件夹后,Web项目在Visual Studio中正确加载,而无需以管理员身份运行VS。
但是现在当我启动网站时,会出现另一个警报:“无法在Web服务器上启动调试。 IIS不列出与启动的URL匹配的Web站点。单击“帮助”以获取更多信息。”最初,我只是单击“创建虚拟目录”,然后再次启动,但是同样的警报重新出现。
我从警告框中选择了帮助按钮。这导致此MSDN页面,其中提出了大约两打要检查的事情,还有大约一半的链接到其他文章。我现在感觉有点像《爱丽丝梦游仙境》中的爱丽丝,一路往兔子洞里走。

2015年2月3日更新:当我在本地IIS实例上运行时,我的解决方法是以管理员身份运行Visual Studio。最终,我们改用IIS Express来运行应用程序,然后放弃了该应用程序,转而使用同事构建的另一种解决方案。这个决定与这个问题无关。谢谢大家的反馈和想法。

2016年3月7日更新:目前我无法复制此问题,因为我们已经没有去年我处理它时的解决方案状态。如果有管理员能够关闭这个问题,我将不胜感激。关闭此问题的选项与我的当前情况不符,但也许其他人在遇到这种情况时会发现以下建议有用。感谢所有提出建议的人。


1
你是通过VS启动应用程序还是手动连接调试器到w3wp.exe?你是使用IIS还是Express? - Paul Abbott
1
谢谢Paul。我尝试了你的建议并尝试了几件事情,只是将它们附加到原始帖子中。请参见上文。 - Ken Palmer
1
断点显示为红色圆形(未填充)吗? - Saravanan
1
一个尝试 - 关闭“只调试我的代码”选项。您也可以查看https://lowleveldesign.wordpress.com/ - 这是一个我认为对.NET调试有很深入了解的人的博客。 - Arkadiusz Kałkus
4个回答

2

请确保以下内容:

  1. 在“工具”->“选项”->“调试器”,取消勾选启用我的代码
  2. 您正在调试模式下运行应用程序,而不是发布模式。
  3. 解决方案已经构建更新

1
这是我为此类情况保留的一些想法清单。
检查您的dll被引用的位置,并确保这是您要调试的代码。
检查您在构建时是否处于正确的模式:Debug / Release,因为它们可能会将dll放在不同的位置。
您是否附加到了正确的进程?
对于运行在IIS上的网站,您正在使用的代码是否与在IIS中运行的代码相同?
转到调试> Windows> 模块,如果相关的dll在那里,请右键单击它并加载符号。如果列表中没有它,请尝试运行代码。有时即使说断点不会被命中,也只是因为dll直到进入需要它的情况才会加载。尝试依赖于dll的情况,它可能仍然会命中断点。
重新启动浏览器。您可能从旧的dll中缓存了某些内容。

1

我之前遇到过这个问题,后来我重建了解决方案包(右键单击解决方案包并运行重建)后成功解决了它。


1
你可以反编译.dll文件来检查编译过程是否正常。 - Clement

1

根据我的以往经验,请考虑以下内容:

  • 检查您是否在正确的位置设置了断点并运行了适当的页面或控制器
  • 右键单击断点 => 位置 => 选中“允许源代码与原始版本不同”。如果您安装了resharper,它可能会有所帮助。

  • 如果您通过Ajax调用进行调用,请确保页面上没有java-script错误(对于此IE默认捕获js错误)

  • 有时是因为没有彻底构建,因此需要清理解决方案(右键单击解决方案,然后选择“清理解决方案”项),然后再“重新构建解决方案”。

  • 有时是因为您可能已禁用某些类库的构建选项,因此在这种情况下,您需要单独重建这些类库。(您可以通过从“生成”菜单中选择“配置管理器”项目来找到它)

希望这些能帮到您


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