提问



好的,我有:


Visual Studio 2010 RC,W7 x64,启动了一个新的项目类型的Silverlight应用程序。在ASP.NET Web应用程序项目中托管Silverlight应用程序。 Silverlight版本3.0。
添加了LinqToSQL类,WCF服务,Winform Tester应用程序(解决方案中的项目)和一些类(也作为解决方案中的项目)。


昨天,我突然得到了断点当前不会被击中。这个文件没有加载任何符号。消息出现在IDE中,但它只影响Web Appliaction,我可以调试Silverlight和Winform App。


我尝试/做了什么来摆脱这个消息:



  • 重置Visual Studio设置

  • 删除了每个\\ Temporary ASP.NET Files文件夹中的所有文件(每个32位/64位和Framework 2.0和4.0都有一个)

  • 尝试使用Visual Studio集成Web服务器进行调试 - 通常我使用IIS,在解决方案的项目输出中删除每个项目文件夹中的每个obj和bin文件夹

  • 创建了一个新解决方案并将所有项目添加到此新解决方案

  • 删除了解决方案suo文件

  • 创建了一个新的ASP.NET Web应用程序来测试它是否是VS安装问题=>我可以调试这个新项目/解决方案

  • 多次重启机器

  • 修复了vs.net安装

  • 做了IISReset

  • 从IIS中删除了Web应用程序

  • 使用Web应用程序的项目属性下的创建虚拟目录按钮在IIS中创建新的Web应用程序

  • 将每个项目的框架版本从3.5更改为4.0

  • 在我的第二台机器上打开解决方案=>相同的行为

  • 抓取Microsoft Connect以查找错误/类似问题

  • SPENT 7小时。



所以,这发生在我生命中的第二次。上次我通过删除临时ASP.NET文件夹解决了它,但这次我需要你的帮助。

最佳参考


右键单击解决方案 - >属性


查看Common Properties - > Startup Project


选择多个启动项目


选择需要调试的项目的开始操作。

其它参考1


我有同样的问题,谷歌搜索后我发现了两个典型的解决方案:



  1. 确保在.Web项目中激活Silverlight调试器。打开项目属性,然后在Web选项卡下选择Silverlight调试器。

  2. 重新启动Visual Studio并删除所有bin和obj文件夹。



但这些都不适合我。然后有人提到了一个线程尝试使用IE作为浏览器。这使得调试和断点再次起作用!


编辑:


后来我一直在努力与IE9无法正常工作,因为它附加到错误的进程。我没有每次手动附加到正确的IE进程,而是找到了一个巧妙的技巧:



  • 右键单击.Web项目中生成的其中一个页面(.html或.aspx)

  • 点击浏览方式......

  • 将IE设置为默认浏览器(仅影响Visual Studio选择的浏览器)



现在,Visual Studio将在运行.Web项目时启动IE并附加到正确的进程。应该这样做。

其它参考2


每当我遇到这个特殊错误时,就会发现Visual Studio正在加载程序集的文件夹与运行Web应用程序的文件夹不同。


也就是说,应用程序服务器正在运行应用程序


C:\dev\MyApplication\bin 


但Visual Studio正在调试


C:\dev\MyOtherApplication\bin (or something along those lines, anyway).


注意 - 出于各种原因,我使用IIS作为应用程序主机进行调试,而不是大多数人使用的极小的独立Gizmo。这可能会影响我的答案的有用性!


更新:


对于IIS,应用程序服务器目录(即上面的C:\dev\MyApplication)是为Web应用程序配置的物理目录 - 可以通过更改应用程序的基本设置来控制。


对于Visual Studio,调试目录(即上面的C:\dev\MyOtherApplication)是找到svc文件的目录,通常与csproj项目文件的目录相同。

其它参考3


我的问题原来是在Debug配置中打开了Properties-> Build-> Optimize code复选框。关闭,重建和调试工作正常。

其它参考4


您面临的原因是PDB(PDB代表程序数据库,一种专有文件格式(由Microsoft开发)用于存储有关程序的调试信息)不是最新的,这可能是由于某些原因:


1-正如Bevan所说,您可能正在调试另一个应用程序!


2-您正在调试同一应用程序的另一个版本。例如,您使用当前版本的代码附加了以前构建的应用程序,以便进行调试而无需(重新)构建它。


清除或重建解决方案为我解决了这些问题。


为了确保问题不是你的问题,尝试使用VS 2008调试相同的应用程序(恐怕它可能是VS 2010中的一个错误 - 它仍然是测试版!)。

其它参考5


我有同样的问题,我正在调试我的项目,我不得不右键单击项目并选择新的调试实例。我只需要这样做一次,之后就可以正常工作了。

其它参考6


这个错误时不时地出现给我,我总是可以追溯到相关组件的项目设置。您不必等待,直到您的代码无法遵守断点或直到您设置断点,才能知道哪些程序集已加载符号。


在调试模式下运行项目时,它将在输出窗口中列出哪些程序集的符号加载如下(您可能需要在新选项卡中打开图像):T





所以在这种情况下,BASD.Core.Data.dll没有加载符号。因此,您可以将此程序集的项目设置与管理加载符号的另一个程序集的项目设置进行比较,以便弄清楚为什么有些人会做,有些人不会加载符号。


对我而言,每次发生这种情况都是因为调试信息没有被创建。所以我在(C#)项目中打开项目属性>构建>高级。


因此对于上面的Basd.Core.Data.dll,即高级构建设置没有符号:





对于Basd.Core.Configuration.dll,即我可以设置并命中断点的程序集,设置为:





所以我在后一个项目中输出调试信息而不是第一个,因此我能够在Basd.Core.Configuration.dll中找到断点。


另请注意,仅仅在项目的bin文件夹中为给定的.dll创建.pdb文件是不够的,因为它可能已过期,因此Visual Studio不会将其作为有效的符号文件你真的试图通过。


另请注意,更改构建配置可以更改构建信息设置以及从哪里获取符号。


(我在这种情况下意识到我处于发布模式但该方法仍然适用)

其它参考7


转到项目属性 - >构建 - >高级...


在输出部分中,在调试信息下拉列表中选择完整

其它参考8


确保在DEBUG模式而不是RELEASE模式下运行程序。

其它参考9


我刚刚根据部署Silverlight应用程序解决了这个问题。(这个答案与其他一些人重复,但我会尝试更彻底地解释它。)[17]


问题很可能是您的Silverlight应用程序未在构建/启动时正确部署到Web应用程序。这是一个引用问题 - 它很容易理解,但在您第一次遇到它时并不明显。


就像任何其他项目引用一样,引用的项目的输出应该被复制到引用项目的bin文件夹中以便进行调试。对于类库,当您右键单击并选择添加引用...时会发生这种情况。对于Silverlight,您应该通过项目属性添加引用。



  • 右键单击您的项目,然后选择属性

  • 选择左侧的Silverlight应用程序标签

  • 按添加...按钮,然后从对话框中选择您的Silverlight项目



这将从您的托管Web应用程序添加对Silverlight应用程序的引用,并确保在构建或部署时将xap文件复制到Web应用程序。这意味着当前的Silverlight应用程序及其调试文件位于正在调试的应用程序中,您将能够逐步执行代码。

其它参考10


如果您正在调试Web项目,请确保在web.config文件中设置了debug =true属性:


<system.web>
    <compilation debug="true"   .../>

其它参考11


我在Windows 7上遇到了同样的问题并尝试了一切:清理了DLL,调查了模块list,关闭了Just My Code等等。


在我以管理员身份运行Visual Studio之后问题就解决了。老实说。为什么微软不能警告我,它以管理员身份运行?这会节省我几个小时的时间工作的。

其它参考12


对我来说问题是我在项目设置的Build选项卡中启用了优化代码。

其它参考13


有同样的问题


出于某种原因,其中一个DLL已在GAC中注册,因此它始终具有与代码不同的版本。


一旦我从GAC中删除它,问题就解决了

其它参考14


调试 - > 附加到流程 - >

选择调试这些代码类型:选项 - >

选择托管v3.5,v3.0,v2.0 托管v4.5,v4.0
[18]

其它参考15


对于那些使用Visual Studio 2008的读取,而不是Visual Studio 2010并且正在收到此错误。在这种情况下,上面的答案对我没有帮助,所以我分享了我的经验。


如果您通过附加到w3wp.exe进程而不是使用ASP.NET Development Server进行调试(从调试开始)来调试Visual Studio 2008中的IIS Web应用程序,则可能是您的问题:


Visual Studio可能仍在从过时的IIS进程中引用您的dll中的符号文件(调试期间使用的文件)。并且该符号文件已由.NET源代码重新编译重新创建,但IIS进程仍引用旧的符号文件。


要修复:


只需在Visual Studio中停止调试,重新启动Web应用程序,然后重新连接到该进程。然后断点应该从黄色(当您看到此错误时)再次变为红色。


========================


尝试更多的事情(今天发现新情况):


在一次一个下面的链接中执行每个项目符号,但是在您尝试的每个项目中重复我的步骤。


http://carnotaurus.philipcarney.com/post/4130422114/visual-studio-debugging-issue-with-files-of-the-same[19]


1.)在Visual Studio中停止调试(按红色方块图标)

2.)清除解决方案

3.)构建解决方案

4.) [[INSERT BULLET INSTRUCTION]]

5.)工具>附加到过程(或从调试开始)

6.)启动你所附加的程序,并运行它以使你的代码受到攻击



6解释说:



如果附加到nunit.exe,则打开NUnit并运行测试,以便命中断点


如果附加到w3wp.exe(IIS站点),则在浏览器中打开您的站点并转到将触及断点的页面


编辑:



今天我注意到,如果您尝试调试未设置为启动项目的项目,它将显示此信息。当您附加到您的w3wp.exe进程时,它会认为它在设置为启动项目的项目上进行调试。要解决此问题,只需右键单击Web应用程序项目,然后选择设置为启动项目。然后尝试重新附加到您的流程。

其它参考16


场景是这样的:一个特定的项目是你的启动项目(例如有Main方法)。该项目正在引用解决方案中的其他项目。其他项目中的断点并未受到打击。


快速解决方案:在构建解决方案时,查看启动项目的Build输出路径(通常是bin \\ Debug)。查看您引用的项目的DLL和PDB文件。确保它们的上次修改日期是您上次构建解决方案的日期。如果不是,请将它们从每个项目的Build输出路径复制到您的启动projects构建输出路径。例如:


项目A有主要。它引用了项目B.您的断点不会在项目B中被击中。将DLL和PDB文件从项目B的构建输出路径复制到项目A的构建输出路径。然后运行您的解决方案。断点现在将是击中。


现在你需要弄清楚为什么Project A不会复制Project B的DLL和PDB文件。这里的答案涵盖了大多数情景。未涉及的一个方案是确保您的项目和解决方案正确绑定到TFS。我有一些绑定的项目和一些没有正确绑定的项目。这给我带来了问题。一旦我解决了这个问题,问题就消失了,我不再需要复制DLL和PDB文件了。

其它参考17


在我的案例中,同样问题的解决方案是以下步骤组合:



  1. 解决方案 - >属性选择多个启动项目,选择需要调试的项目的开始操作。

  2. 从服务参考中删除了服务并清理了解决方案。

  3. 重建服务项目

  4. 将其添加回服务参考

  5. 清理解决方案并重建。


其它参考18


要在Web.config中修复此问题,我只需要添加debug="true"


  <system.web>
    <compilation targetFramework="4.0" debug="true">


什么帮助我找到这个解决方案一直在调试模块窗口,并看到我加载的ASP.NET DLL:二进制文件没有使用调试信息构建。

其它参考19


我有同样的问题,但在VS2013中的Web应用程序。对我来说,答案是更新解决方案的构建配置: -



  1. 右键单击解决方案,然后选择属性

  2. 选择调试配置

  3. 选择trivet中配置属性下的配置

  4. 选中要调试的每个项目的构建框



一旦我这样做,我的所有断点都开始工作了。

其它参考20


好的 - 我们走了:


(在silverlight应用程序中:请首先检查您的服务器项目属性中的web中是否检查了silverlight - 如果没有解决它,请在下面尝试此操作)


第一次做:
首先运行:devenv.exe/ResetSettings

1:
在顶部菜单中单击调试标记
2:
单击选项和设置
3:
在调试和常规下找到enable .net framework source stepping
4:
方框里打勾。
5:
现在所有符号都将被下载并重新配置:)


如果在上面之后再次发生,只需清除符号所在的文件夹:


1:
在顶部菜单中单击调试标记
2:
单击选项和设置
3:
在调试和符号下,找到空符号缓存按钮并单击它。

其它参考21


从浏览器打开Web应用程序URL,然后在VS.Net IDE中使用工具 - > AttachtoProcess


然后附加到aspnet_wp.exe。


调试器将开始工作

其它参考22


我不得不从注册表手动卸载.dll的所有实例,并从本地驱动器手动卸载.dll的所有实例。卸载/重新安装我的应用程序,现在我打破了断点!这样做浪费了半天:(。

其它参考23


我尝试重命名obj\debug文件夹中的.pdb文件,并做了一个干净的解决方案并重建。

它创建了一个新的.pdb文件,我能够正确地击中断点。

其它参考24


我遇到了同样的问题 - 在Visual Studio中尝试调试工作时失去了很多时间。


它最终成为Nuget - 我有3个版本的Newtonsoft.Json(跨越7个C#项目)。该解决方案将编译但不可调试。


我通过在Nuget的软件包管理器控制台中运行以下内容来修复此问题:


PM> Update-Package Newtonsoft.Json

其它参考25


对于我的WPF应用程序,我删除了应用程序文件夹,再次从源代码管理中获取最新,然后重建。所有断点现在都很好用。

其它参考26


尝试将Silverlight应用程序项目设置为启动项目:右键单击项目 - >设置为启动项目。然后按F5并查看是否可以捕获断点...


每次更改silverlight应用程序时,尝试删除浏览器中的浏览/临时数据

其它参考27


另一个可能有用的轶事 -


当我的一个项目使用Release输出文件夹中的文件引用时,我遇到了这个问题。当构建结果放在Goods文件夹中时,这些Release dll会覆盖Debug dll。


解决方案是确保在csproj文件中,我的引用s HintPath是


<HintPath>..\..\Core\Goods\$(Configuration)\MyFramework.dll</HintPath>


并不是


<HintPath>..\..\Core\Goods\Release\MyFramework.dll</HintPath>

其它参考28


我遇到了这个问题,在客户端 - 对于每个应用程序解决方案 - 他们将大多数共享程序集复制到 References 文件夹,然后将它们作为解决方案项目<添加到解决方案中/em>作为解决方案中的项目。


不确定为什么,但其中一些是可调试的,有些则不是,即使在程序集的References设置中指定了正确的完整路径。


这种不可预知的行为几乎让我疯狂:)


我通过删除 References 文件夹中的所有程序集来解决这个问题,该文件夹中包含有源代码的项目,并且保持对共享程序集的版本信息的良好跟踪。

其它参考29


我有一个类似的问题,除了我的问题是愚蠢的 - 我有2个内置的Web服务器在2个不同的端口下运行的实例我有我的项目 - >属性 - > web - >开始URL指向固定端口但Web应用程序实际上并未在该端口下运行。所以我的浏览器被重定向到起始URL,它引用了1539,但代码/调试实例在端口50803下运行。


我将内置Web服务器更改为在固定端口下运行,并调整了我的起始URL以使用该端口。
project - > properties - > web - >Servers部分 - >使用Visual Studio Development Server - >特定端口