断点当前不会被命中。Silverlight应用程序中尚未为此文档加载任何符号


331

好的,我有:

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

昨天,突然间我得到了“当前不会找到断点。没有为该文档加载任何符号。消息出现在IDE中,但只影响Web应用程序,我可以调试Silverlight和Winform App。

我尝试/做了的摆脱消息的事情:

  • 重置Visual Studio设置
  • 删除每个\ Temporary ASP.NET Files文件夹中的所有文件(每个32bit / 64bit以及Framework 2.0和4.0都有一个)
  • 尝试使用Visual Studio Integrated Web服务器进行调试-通常我使用IIS,在解决方案的项目输出中,我删除了每个项目文件夹中的每个obj和bin文件夹
  • 创建了一个新的解决方案并将所有项目添加到该新解决方案中
  • 删除解决方案suo文件
  • 创建了一个新的ASP.NET Web应用程序以测试它是否是VS安装问题=>我可以调试此新项目/解决方案
  • 重新启动机器几次
  • 修复了vs.net安装
  • 做了一个IISReset
  • 从IIS中删除了Web应用程序
  • 使用Web应用程序的“项目属性”下的“创建虚拟目录”按钮在IIS中创建新的Web应用程序
  • 将每个项目的Framework版本从3.5更改为4.0
  • 在第二台机器上打开解决方案=>行为相同
  • 对Microsoft Connect进行爬网以查找错误/类似问题
  • 花了7小时。

因此,这是我生命中的第二次。上次我通过删除Temporary ASP.NET Files Folder解决了该问题,但这一次我需要您的帮助。


这是一个重复的,看看[此页] [1],对于回答你的问题[1]:stackoverflow.com/questions/2155930/...
SuperKael

@CalebJares哈哈我今天遇到了这个问题。原来我是在发布模式下构建/运行而不是调试。
theB3RV

就我而言,在项目属性的生成”选项卡中关闭“ 优化代码”可以解决此问题。
Arash Motamedi

Answers:


176

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

在Common Properties-> Startup Project下查看

选择多个启动项目

在需要调试的项目上选择“开始操作”。


行得通

17
我有多个项目,并按您所说的启动它们。.其中一些是类库项目。.出现以下错误弹出窗口:“无法直接启动具有类库输出类型的项目”
Muhammad Azeem 2012年

3
我遇到了穆罕默德评论的完全相同的问题。VS不会为其加载符号的项目是一个库项目。有趣的是,链接到相同库项目的另一种解决方案可以毫无问题地调试相同的库!
维维安河

1
我认为这不是问题的答案。它只是将多个项目设置为同时启动,而不是通常的一个项目。如果项目是Class Lib(dll),则它将显示一条错误消息,指出无法启动。一个项目是否是一个开始项目与调试无关。
格雷格·古姆

就我而言,我已经重新配置了运行项目的IIS站点,使其指向另一个文件夹。不知何故,这清除了上面指示的解决方案设置...?可能是源代码控制错误,但我找不到.sln的更改。无论如何,按照说明进行重置可以解决问题-希望有识之士可以帮助他人。
brichins 2015年

79

我遇到了同样的问题,在进行谷歌搜索之后,我找到了两个典型的解决方案:

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

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

但是这些都不对我有用。然后有人提到了一个很深的话题,尝试使用IE作为浏览器。这使得调试和断点再次起作用!

编辑:

后来我为IE9无法正常运行而苦苦挣扎,因为它附加到错误的过程上。我没有每次都手动附加到正确的IE进程,而是找到了一个巧妙的技巧

  • 右键单击.Web项目中生成的页面之一(.html或.aspx)
  • 点击“浏览...”
  • 将IE设置为默认浏览器(只会影响Visual Studio对浏览器的选择)

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


谢谢,这对我有用!唯一的问题是:我无法在任何配置文件中设置要运行的浏览器(可以吗?),所以现在我将IE用作默认浏览器。呸。
DanTheMan 2011年

1
为了避免将IE作为默认浏览器,我更改了.Web项目中的启动设置,以将IE作为命令行参数运行IE。
angularsen 2011年

你真棒。最近几天,我一直在努力解决这个问题。我什至重新安装了Visual Studio。我的默认浏览器是firefox,我尝试了chrome。尝试使用IE并没有让我大吃一惊,这真是浪费时间。谢谢(你的)信息。
2011年

修正我在编辑后的答案中所述的问题时,不应遵循我之前对启动设置的评论。只需使用默认的“特定页面选项”,否则我相信它可能会附加到错误的过程中。
angularsen 2011年

6
我已经在.Web项目设置的“ Web”选项卡上选中了“ Silverlight”复选框。现在工作了。谢谢!
尤金·马克西莫夫

54

每当出现此特定错误时,事实证明,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项目文件位于同一目录。


2
也许可以,但是Hans K的答案对我有用。我猜根据情况有多种答案。
鲍勃·温登伯格

好的,但是我怎么知道这是否正在发生?我如何解决它?
MGOwen 2012年

@MGOwen-在IIS配置中,检查包含服务的虚拟文件夹的物理位置,并确保它与VStudio的输出目录匹配。
Bevan 2012年

是的,我也使用IIS,但是VS崩溃后,我的解决方案文件损坏了,因此我不得不再次将其从Subversion中撤出。当然,我忘记了这样做,它又恢复为使用VS webdev服务器。h!谢谢!
Fedor Steeman

3
当VS感到困惑时,请确保返回到Debug配置文件。那让我。
克里斯托弗·史蒂文森

46

对我来说,问题出在“调试”配置中,“属性”->“构建”->“优化代码”复选框已打开。将其关闭,重建和调试正常。


2
为我工作。真的不知道为什么,通常打开“优化代码”将不会让您中断{和}。
活力

也为我工作!谢谢!
bisand

1
项目准备发布版本。总有东西不存在。
伊恩·沃伯顿

为我做到了!+1
Imdad

22

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

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

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

清洁或重建解决方案为我解决了此类问题。

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


感谢您的注意。.当然,我清洗/重建了解决方案,但这没有帮助。要点1:如果我在其他系统上尝试过该应用程序,该如何调试?顺便说一句,对于Point 2也是一样。它是RC的,而且非常稳定。
Christian Casutt 2010年

我不太理解您的短语“我在另一个系统上尝试过”!Release Candidate并不意味着它没有错误,如果尝试,您将不会失去任何东西。:如果您使用IE8,也有人说,这可能是问题的根源,看看这个weblogs.asp.net/abdullaabdelhaq/archive/2009/06/01/...
萨迈赫Deabes

我也发现了这一点:stackoverflow.com/questions/389290/…人们建议那里也提供过多的解决方案。看一看在线断点注释。
Sameh Deabes 2010年

好的我明白了。我的短语“我在另一个系统上尝试过” =>将解决方案复制到USB记忆棒上,删除所有bin / obj文件夹,在VS.NET中打开解决方案并尝试对其进行调试。结果:相同的行为=>断点不会命中..感谢其他链接,我现在将阅读它。
Christian Casutt 2010年

Clean + Rebuild并不总是更新.pdb文件。我所做的-转到了Web应用程序的/ Bin文件夹,并手动删除了所有.pdb文件,然后重新构建。像魅力一样工作。
德米特里(Dmitriy)

21

我遇到了同样的问题,正在调试我的项目,因此必须右键单击该项目,然后选择“新的调试实例”。我只需要这样做一次,然后就可以正常工作了。


很奇怪。我有同样的问题,并用谷歌搜索了2个小时。由于某种原因,我在调试时无法加载模块(调试-> Windows->模块)。我只是尝试了此选项,然后开始进行调试。我正在使用Vs2019
Rennish Joseph

18

对于我来说,此错误有时会出现,我可以随时将其追溯到相关程序集的项目设置。您不必“等待”直到您的代码未能遵守断点或您设置断点,即可知道哪些程序集已加载符号。

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

输出窗口

因此,在这种情况下,BASD.Core.Data.dll没有加载符号。因此,您可以将该程序集的项目设置与设法加载符号的另一个程序集的项目设置进行比较,以弄清为什么某些加载和不加载符号的原因。

但是,“对我来说”每次都会发生,这是因为未创建调试信息。所以我在(C#)项目中打开项目属性>构建>高级。

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

pdboff

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

pdbon

所以我在后面的项目中而不是在第一个项目中输出调试信息,因此我可以在Basd.Core.Configuration.dll中达到断点

还要注意,仅在给定.dll的项目的bin文件夹中仅存在一个.pdb文件是不够的,因为它可能已过期,因此Visual Studio无法将其作为.dll的有效符号文件使用您正在尝试逐步解决。

另请注意,更改构建配置可以更改构建信息设置以及从中提取符号的位置。

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


1
您也可以通过“模块”窗口检查加载了哪些符号。如果转到调试> Windows>模块,它将列出所有模块及其符号状态。对于未加载的,可以右键单击它们,然后单击“加载符号”。但是,这更多是短期修复,并且仅当它们首先出现在列表中时才起作用。
EF0



10

调试 -> 附加到进程 ->
选择调试以下代码类型:选项->
选择托管v3.5,v3.0,v2.0托管v4.5,v4.0 在此处输入图片说明


这是我遇到的问题。我在v4.5中有一些项目,而在v2.0中有其他项目(是的,我知道,我知道...)。显然,此设置不是基于项目的,因此在v4.5项目中进行设置时,进入v2.0项目时必须将其重新设置。
L_7337 '16

9

我已经根据部署Silverlight应用程序解决了此问题。(此答案是其他一些答案的重复,但我将尝试更彻底地解释它。)

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

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

  • 右键单击您的项目,然后选择“属性”
  • 选择左侧的“ Silverlight应用程序”选项卡
  • 按下“添加...”按钮,然后从对话框中选择您的Silverlight项目

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


9

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

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

8

我在Windows 7上遇到了同样的问题,并尝试了所有方法:清理了DLL,调查了模块的列表,关闭了“ Just My Code”等等。

以“管理员”身份运行Visual Studio后,该问题已解决。老实说 为什么Microsoft不能仅仅警告我它没有以“管理员身份”运行?这样可以节省一些时间。



7

有同样的问题

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

将其从GAC中删除后,问题就解决了


您的意思是如何解决这种情况?还是我如何将其删除?
Stikut

您如何删除它。我遇到了同样的问题,无法解决。我已经尝试了一切,所以我希望这是我的解决方案。
盖伊2014年

1
我希望你能使用这一个: support.microsoft.com/kb/873195 当然,除非你有一些其他错误
Stikut

6

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

如果要通过附加到w3wp.exe进程而不是使用ASP.NET开发服务器进行调试(从调试开始)的方式在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

1.)在Visual Studio中停止调试(按红色正方形图标)
2.)清洁解决方案
3.)构建解决方案
4.)[在此处插入子弹说明]
5.)工具>附加到进程(或从调试开始)
6.)启动您要附加的程序,然后运行该程序,以使您的代码被点击

6解释:

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

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

编辑:

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


如果有帮助,请随时提出答案。:-)我将告诉您投票的作用。
MacGyver 2015年

我支持您的回答,因为它很有帮助。我尝试了另一种方法,但您的方法却使我失望了。谢谢+1。
Zaker

5

场景是这样的:一个特定的项目就是您的启动项目(例如,具有Main方法)。该项目引用了解决方案中的其他项目。其他项目的断点没有受到影响。

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

项目A具有Main。它引用项目B。在项目B中不会遇到断点。将DLL和PDB文件从项目B的Build输出路径复制到Project A的Build输出路径。然后运行您的解决方案。现在将达到断点。

现在,您需要弄清楚为什么Project A无法通过Project B的DLL和PDB文件进行复制。这里的答案涵盖了大多数情况。未涉及的一种情况是确保您的项目和解决方案已正确绑定到TFS。我绑定了一些项目,而有些绑定不正确。那给我造成了问题。解决此问题后,问题就消失了,我不再需要复制DLL和PDB文件。


您的第2段解决了我的问题。解决方案中的项目之一与启动dll的bin目录位于不同的bin目录中。
BobRodes

4

在我的情况下,针对同一问题的解决方案是以下步骤的组合:

  1. 解决方案->属性选择多个启动项目,然后在需要调试的项目上选择“开始操作”。
  2. 从服务参考中删除了该服务,并清理了解决方案。
  3. 重建服务项目
  4. 将其添加回服务参考
  5. 清理解决方案并重建它。

4

要解决Web.config中的此问题,我只需要添加 debug="true"

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

帮助我找到此解决方案的原因是,调试时一直在查看“ 模块”窗口,并发现对于已加载的ASP.NET DLL:二进制文件未使用调试信息构建。


3

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

  1. 右键单击解决方案,然后选择属性
  2. 选择调试配置
  3. 在trivet的“配置属性”下选择“配置”
  4. 选中要调试的每个项目的“构建”框

完成此操作后,我所有的断点都开始工作。


这对我有用,但是我还必须在Configuration列中将所有项目从Release更改为Debug。
JoshYates1980 '16

2

好吧,我们开始:

(在“ silverlight应用程序”中:请首先检查服务器项目“属性”中的“ web”中是否已检查silverlight-如果仍无法解决,请在下面尝试)

第一次执行:首先运行:devenv.exe / ResetSettings和1:在顶部菜单中,单击调试标签2:单击选项和设置3:在“调试”中,在“常规”下找到“启用.net Framework源代码步进” 4:打勾 5:现在所有符号将被下载并重新配置:)

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

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


2

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

然后附加到aspnet_wp.exe。

调试器将开始工作


2

我必须从注册表中手动卸载.dll的所有实例,并从本地驱动器中卸载.dll的所有实例。卸载/重新安装了我的应用程序,现在即时达到断点!浪费了半天时间:(。


2

我尝试重命名.pdb文件obj\debug夹中的文件,并做了一个干净的解决方案并重建。
它创建了一个新.pdb文件,我能够正确命中断点。


2

我遇到了同样的问题-浪费大量时间试图在Visual Studio中进行调试。

最后是Nuget-我有3个版本的Newtonsoft.Json(横跨7个C#项目)。该解决方案可以编译,但不可调试。

我通过在Nuget的Package Manager控制台中运行以下命令解决了该问题:

PM>更新包Newtonsoft.Json


2

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


1

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

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


1

另一个可能有用的轶事-

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

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

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

并不是

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


1

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

尚不知道为什么,但是其中一些是可调试的,而有些则不是,即使在程序集的“引用”设置中指定了正确的完整路径。

这种不可预测的行为使我发疯了:)

我通过从“ References ”文件夹中删除所有带有源代码项目的程序集来解决此问题,并很好地跟踪了共享程序集的版本信息。


1

我有一个类似的问题,只是我的问题很愚蠢-我有2个内置Web服务器的实例在2个不同的端口下运行,并且我的项目->属性-> web->“启动URL”指向固定端口,但是该Web应用实际上并未在该端口下运行。因此,我的浏览器被重定向到引用1539的“起始URL”,但是代码/调试实例在端口50803下运行。

我将内置的Web服务器更改为在固定端口下运行,并调整了“开始URL”以也使用该端口。项目->属性-> Web->“服务器”部分->“使用Visual Studio开发服务器”->特定端口

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.