Visual Studio 2013没有遇到断点

时间:2014-12-29 23:13:42

标签: asp.net-mvc debugging visual-studio-2013

我正在使用Visual Studio 2013中无法达到断点的ASP.NET解决方案。 Visual Studio将成功点击其他解决方案的断点,此解决方案中的断点以前有效。但此时他们无法工作。

我使用的是Visual Studio 2013 Ultimate,Update 4.这是安装在Windows 8.1,64位上。

这是一个包含3个项目的MVC解决方案:BusinessEntities,DataAccessLayer(DAL)和Web项目。所有这些项目中的断点都无法正常工作。我甚至在家庭控制器的Index ActionResult中尝试了一个断点,但仍未能在断点处停止。

在Visual Studio功能区中,解决方案配置设置为Debug。此外,Configuration Manager显示我的所有3个项目都将配置设置为Debug。重新启动IIS,重新启动Visual Studio,并重新启动并没有解决此问题。选择Build>清洁解决方案,构建>重建,然后调试>启动调试也没有修复它。

在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应用程序的站点名称类似于&#34; local.mysite&#34;,并且在我的hosts文件中有一个匹配的条目。该站点使用DefaultAppPool,它使用.NET CLR版本4.0和集成管理管道模式。我的解决方案中的3个应用程序以.NET Framework 4为目标。

如果我将其切换回IIS Express,调试器将开始工作。 IIS的版本更改为8.0,进程名称当然是iisexpress。从技术上讲,我不必在工作站上的IIS下运行它,但我更愿意这样做。我在IIS中错误配置或忽略了哪些可能导致调试器失败的原因?

在属性页面的Web选项卡上查看项目服务器设置时,我注意到下拉列表设置为&#34; IIS Express&#34;。切换到&#34;本地IIS&#34;后,系统提示我以管理员身份运行VS.在这之后,我能够将服务器更改为本地IIS,并点击调试器。我检查了更改,关闭VS,启动VS不作为Admin运行,并加载解决方案。无法使用以下消息加载Web项目:Web应用程序项目[MySiteName]配置为使用IIS。无法访问IIS元数据库。您没有足够的权限访问计算机上的IIS网站。

最终,此站点的某些部分将采用Active Directory身份验证。那么,我是否需要在IIS Express下运行站点,或者如果我希望在IIS下运行站点,则始终以管理员身份运行VS?感谢。

我找到了一个解决方案,可以通过“Web应用程序项目[MyApp]配置为使用IIS”的错误消息。无法访问IIS Metabase。您没有足够的权限访问计算机上的IIS网站。“请按照此文章中的步骤操作。 Error - Unable to access the IIS metabase

授予我的帐户访问权限的intetsrv \ config文件夹后,无需以管理员身份运行VS即可在Visual Studio中正确加载Web项目。

但现在当我启动该站点时,会出现另一个警告:“无法在Web服务器上启动调试。 IIS未列出与启动的URL匹配的网站。单击“帮助”以获取更多信息。“最初我只是单击”创建虚拟目录“并再次启动,但同样的警报再次出现。

所以我从警报中选择了“帮助”按钮。这导致this MSDN page,它提出了大约二十几个要检查的东西,其中大约一半的链接到其他文章。我现在感觉有点像爱丽丝梦游仙境,沿着兔子洞走得更远。

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

2016年3月7日更新:此时我无法复制此问题,因为我们在去年处理它时的状态不再具有解决方案。如果主持人可以解决这个问题,我将不胜感激。关闭此选项的选项与我当前的方案不一致,但如果遇到此方案,其他人可能会发现以下建议有用。感谢所有提出建议的人。

4 个答案:

答案 0 :(得分:2)

确保:

  1. 工具 - &gt;选项调试器&#34; 启用我的代码&#34;未经检查
  2. 您正在调试模式而非发布模式
  3. 中运行应用程序
  4. 解决方案构建是最新的

答案 1 :(得分:1)

根据我以前的经验,请考虑以下事项:

  • 检查您是否已将断点放在正确的位置,并且您正在运行相应的页面或控制器
  • 右键点击断点=&gt;位置=&gt;选中“允许源代码与原始版本不同”。如果您已经安装了resharper,那可能会有所帮助。

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

  • 有时候是因为没有彻底建造,所以要清洁 解决方案(右键单击解决方案并选择“clean solution” item)然后“Rebuild Solution”。

  • 有时这是因为你可能已经禁用了构建选项 一些类库,所以在这种情况下你需要重建它们 类库专门。 (你可以通过支票选择找到它 “Configuration Manager”菜单中的“Build”项目

希望这些帮助

答案 2 :(得分:1)

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

答案 3 :(得分:1)

以下列出了我为这种场合保留的想法。

检查您的dll的引用位置,并确保这是您尝试调试的代码。

在构建时检查您是否处于正确模式:Debug / Release,因为它们可能将dll放在不同的位置。

您是否依附于正确的流程?

对于IIS上的网站,您使用的代码与IIS中运行的代码相同吗?

转到调试&gt; Windows&gt;模块,如果相关的dll在那里,右键单击它并加载符号。 如果它不在列表中,请尝试运行代码。有时即使它说断点不会被击中,也只是因为在你输入需要它的场景之前没有加载dll。尝试依赖于dll的场景,无论如何它可能只是命中断点。

重新启动浏览器。您可能从旧的dll中缓存了一些内容。