好的,我有:
Visual Studio 2010 RC, W7 x64,启动了一个新的项目类型的Silverlight应用程序。在ASP中托管Silverlight应用程序。NET Web应用程序项目。Silverlight 3.0版。
添加了一个LinqToSQL类,一个WCF服务,一个Winform测试应用程序(解决方案中的项目)和一些类(也作为解决方案中的项目)。
昨天,我突然得到了“断点当前不会被击中”。本文档未加载任何符号。'消息出现在IDE中,但它只影响Web Appliaction,我可以调试Silverlight和Winform应用程序。
我尝试/做了什么来摆脱这条信息:
Reset Visual Studio Settings
removed all files in every \Temporary ASP.NET Files Folder (there is one for each 32bit/64bit and for Framework 2.0 and 4.0)
tried to debug using Visual Studio Integrated Web server - normally I use IIS, in the project output of the solution I deleted every obj and bin folders in every project folder
created a new solution and added all the projects to this new solution
deleted the solution suo file
created a new ASP.NET Web Application to test if it is a VS-installation issue => I can debug this new project/solution
rebooted the machine several times
repaired the vs.net installation
did an IISReset
removed the Web App from IIS
used the Create Virtual Directory Button under Project Properties of the Web App to create a new Web App in IIS
changed the Framework Version of every project from 3.5 to 4.0
Opened the Solution on my second machine => same behavior
crawled Microsoft Connect for bugs / similar issues
SPENT 7 HOURS.
这是我人生中第二次这样了。上次我通过删除临时ASP解决了这个问题。NET文件文件夹,但这次我需要你的帮助。
每当我遇到这个特殊的错误时,结果是Visual Studio加载程序集的文件夹与web应用程序运行的文件夹不同。
也就是说,运行应用程序的应用服务器
C:\dev\MyApplication\bin
但是Visual studio正在调试从
C:\dev\MyOtherApplication\bin (or something along those lines, anyway).
注意——由于各种原因,我使用IIS作为应用程序主机进行调试,而不是大多数人使用的小型独立设备。这可能会影响我回答的有用性!
更新:
对于IIS,应用服务器目录(即上面的C:\dev\MyApplication)是为web应用程序配置的物理目录-这可以通过更改应用程序的基本设置来控制。
对于Visual studio,调试目录(例如上面的C:\dev\MyOtherApplication)是svc文件所在的目录,通常与csproj项目文件所在的目录相同。
我也遇到了同样的问题,在谷歌了一下之后,我找到了两个典型的解决方案:
确保在. web项目中激活了Silverlight调试器。打开项目属性,在“Web”选项卡下选择Silverlight调试器。
重新启动Visual Studio,删除所有bin和obj文件夹。
但这些对我都没用。然后有人在帖子后面提到尝试使用IE作为浏览器。这使得调试和断点再次工作!
编辑:
后来我遇到IE9无法工作的问题,因为它附加了错误的进程。我发现了一个巧妙的技巧,而不是每次都手动连接到正确的IE进程:
右键单击.Web项目(.html或.aspx)中生成的一个页面
点击“浏览…”
设置IE为默认浏览器(只会影响Visual Studio的浏览器选择)
现在,Visual Studio将在运行. web项目时启动IE并附加到正确的进程。这样就行了。
我刚刚根据部署Silverlight应用程序解决了这个问题。(这个答案是其他一些答案的重复,但我会尝试更彻底地解释它。)
问题很可能是你的Silverlight应用程序在构建/启动时没有正确部署到你的web应用程序。这是一个参考问题——理解起来很简单,但第一次遇到时并不明显。
就像任何其他项目引用一样,被引用项目的输出应该复制到引用项目的bin文件夹中,以便进行调试。对于类库,当你右键单击并选择“添加引用…”时就会发生这种情况。对于Silverlight,你应该通过Project Properties添加一个引用。
右键单击项目,选择“属性”
选择左边的“Silverlight Applications”选项卡
按“添加…”按钮,然后从对话框中选择你的Silverlight项目
这将从宿主web应用程序中添加一个引用到Silverlight应用程序,并确保xap文件将在构建或部署时复制到web应用程序中。这意味着当前Silverlight应用程序及其调试文件都在正在调试的应用程序中,您将能够逐级检查代码。
对于那些正在使用Visual Studio 2008而不是Visual Studio 2010的读者,他们会得到这个错误。上面的答案在这种情况下对我没有帮助,所以我分享我的经验。
如果您正在Visual Studio 2008中通过附加到w3wp.exe进程而不是使用ASP. exe进程来调试IIS Web应用程序。NET开发服务器进行调试(从调试开始),这可能是你的问题:
Visual Studio可能仍然从过期的IIS进程中引用dll中的符号文件(调试期间使用的文件)。该符号文件已通过. net源代码重新编译重新创建,但IIS进程仍在引用旧的符号文件。
修复:
只需在Visual Studio中停止调试,重新启动web应用程序,并重新连接到进程。然后断点应该从黄色(当您看到此错误时)再次变为红色。
========================
更多可以尝试的事情(今天发现了新情况):
每次做下面链接中的一个项目,但是每尝试一个项目都重复下面的步骤。
http://carnotaurus.philipcarney.com/post/4130422114/visual-studio-debugging-issue-with-files-of-the-same
1)。在Visual Studio中停止调试(按红色方块图标)
2)。清洁解决方案
3)。构建解决方案
4.)[此处插入项目说明]
5)。附加到进程(或从调试开始)
6)。启动您要附加的程序,并运行它,这样您的代码就会被击中
6解释道:
如果连接到NUnit .exe,然后打开NUnit并运行一个测试,这样你的断点就会被击中
如果附加到w3wp.exe (IIS站点),则在浏览器中打开站点并转到将碰到断点的页面
编辑:
今天我注意到,如果你尝试调试一个没有设置为启动项目的项目,它会显示这个。当您附加到w3wp.exe进程时,它会认为它在被设置为启动项目的项目上进行调试。要解决这个问题,只需右键单击web应用程序项目,并选择“设置为启动项目”。然后尝试重新连接到您的进程。
这个错误偶尔会出现,我总是可以将其追溯到相关程序集的项目设置。你不必“等待”,直到你的代码不能遵守断点或直到你设置了断点,才能知道哪些程序集加载了符号。
当您在调试模式下运行项目时,它将在输出窗口中列出哪些程序集具有如下加载的符号(您可能需要在新选项卡中打开图像)
所以在这种情况下,BASD.Core.Data.dll没有加载符号。因此,您可以将此程序集的项目设置与设法加载符号的另一个程序集的项目设置进行比较,以便弄清楚为什么有些程序集可以加载符号,有些程序集不能加载符号。
然而,“对我来说”,“每次”发生这种情况,都是因为没有创建调试信息。所以我在一个(c#)项目中打开项目属性>构建>高级。
所以对于上面的Basd.Core.Data.dll,即没有符号,高级构建设置是:
而对于Basd.Core.Configuration.dll,即我可以设置并命中断点的程序集,设置如下:
所以我在后一个项目中输出调试信息,而不是在第一个项目中,因此我能够在Basd.Core.Configuration.dll中命中断点
还要注意,对于给定的.dll,仅仅在项目的bin文件夹中有一个.pdb文件是不够的,因为它很可能已经过期,因此Visual Studio不能将其作为您试图过路的.dll的有效符号文件。
还要注意,更改构建配置可以更改构建信息设置以及从哪里提取符号。
(我意识到在这种情况下我处于释放模式,但方法仍然适用)
场景是这样的:一个特定的项目是你的启动项目(例如有Main方法)。该项目正在引用解决方案中的其他项目。其他项目中的断点没有受到影响。
快速解决方案:当你构建你的解决方案时,在构建输出路径(通常是bin\Debug)中寻找启动项目。查看所引用项目的DLL和PDB文件。确保它们的最后修改日期是您最后构建解决方案的日期。如果不是,则将它们从每个项目的生成输出路径复制到启动项目的生成输出路径。例如:
项目A有Main。它引用项目B。在项目B中没有命中断点。将DLL和PDB文件从项目B的生成输出路径复制到项目A的生成输出路径。然后运行您的解决方案。断点现在将被击中。
现在您需要弄清楚为什么项目A没有复制项目B的DLL和PDB文件。这里的答案涵盖了大多数情况。一个没有涉及的场景是确保您的项目和解决方案正确地绑定到TFS。我有一些项目绑定,有些没有正确绑定。这给我带来了问题。一旦我修复了这个问题,问题就消失了,我不再需要复制DLL和PDB文件。