关于c#:断点当前不会被击中。 在Silverlight应用程序中没有为此文档加载任何符号

The breakpoint will not currently be hit. No symbols have been loaded for this document in a Silverlight application

好的,我有:

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

昨天,突然间我得到了"目前不会碰到断点"。尚未为此文档加载符号。'消息将显示在IDE中,但它只影响Web应用程序,我可以调试Silverlight和WinForm应用程序。

我试图/做了什么来消除这个信息:

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

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


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

在"公共属性"-->启动项目下查找

选择多个启动项目

在需要调试的项目上选择"启动操作"。


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

  • 确保在.Web项目中激活Silverlight调试器。打开项目属性并选择"Web"选项卡下的Silverlight调试器。

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

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

    编辑:

    后来,我一直在与IE9的不工作斗争,因为它附加了错误的过程。我发现了一个巧妙的技巧,而不是每次都手动附加到正确的IE过程:

    • 右键单击.Web项目(.html或.aspx)中生成的一个网页。
    • 单击"浏览方式…"
    • 将IE设置为默认浏览器(仅影响Visual Studio对浏览器的选择)

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


    每当我出现这个特定的错误时,就会发现Visual Studio从中加载程序集的文件夹与Web应用程序运行的文件夹不同。

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

    1
    C:\dev\MyApplication\bin

    但Visual Studio正在从

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

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

    更新:

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

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


    对我来说,问题是调试配置中的"属性"-->build->optimize code"复选框已打开。关闭它,重新构建,调试正常工作。


    您所面临的问题的原因是PDB("PDB"代表程序数据库,一种存储程序调试信息的专用文件格式(由Microsoft开发)不是最新的,这可能是由于以下原因造成的:

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

    2-您正在调试同一应用程序的另一个版本。例如,您将以前构建的应用程序与当前版本的代码附加在一起,以便在不进行(重新构建)的情况下进行调试。

    清洁或重建解决方案可以为我解决这些问题。

    为了确保问题不是你的问题,请尝试用VS2008调试同一个应用程序(恐怕这可能是VS2010的一个bug——它仍然是beta版!).


    我有同样的问题,我正在调试我的项目,我必须右键单击该项目并选择"新建调试实例"。我只需要这样做一次,然后它就正常工作了。


    对于我来说,这个错误偶尔会出现,我总是可以将其追溯到相关程序集的项目设置。您不必"等待",直到您的代码没有遵守一个断点,或者直到您设置了断点,来知道哪些程序集已经加载了符号。

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

    Output window

    因此在本例中,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的有效符号文件。

    还要注意,更改生成配置可以更改生成信息设置以及从何处提取符号。

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


    转到项目属性->生成->高级…

    在"输出"部分,在"调试信息"下拉列表中选择"满"。


    确保以调试模式而不是释放模式运行程序。


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

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

    我刚刚根据部署Silverlight应用程序解决了这个问题。(这个答案是其他一些答案的副本,但我将尝试更全面地解释它。)

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

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

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

    这将从宿主Web应用程序添加对Silverlight应用程序的引用,并确保生成或部署时将xap文件复制到Web应用程序。这意味着当前的Silverlight应用程序及其调试文件位于正在调试的应用程序内部,您可以单步执行代码。


    我在Windows7上也遇到了同样的问题,我尝试了所有方法:清理了DLL,调查了模块列表,关闭了"仅我的代码"等等。

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


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


    调试->附加到进程->选择调试这些代码类型:选项->选择托管v3.5、v3.0、v2.0或托管v4.5、v4.0enter image description here


    有同样的问题

    出于某种原因,其中一个DLL在GAC中注册,因此它的版本总是与代码不同。

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


    对于正在使用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/4130422144/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应用程序项目,然后选择"设置为启动项目"。然后尝试重新连接到您的进程。


    场景是这样的:一个特定的项目是您的启动项目(例如has the main method)。该项目正在引用解决方案中的其他项目。其他项目中的断点不会受到影响。

    快速解决方案:在构建解决方案时,请查看启动项目的生成输出路径(通常是bindebug)。查看您所引用项目的dll和pdb文件。确保他们最后修改的日期是您最后构建解决方案的日期。如果不是,则将它们从每个项目的生成输出路径复制到启动项目的生成输出路径中。例如:

    项目A有主。它引用项目B。在项目B中不会命中断点。请将dll和pdb文件从项目B的生成输出路径复制到项目A的生成输出路径。然后运行您的解决方案。现在将达到断点。

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


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

  • 解决方案——>属性选择多个启动项目选择要调试的项目的启动操作。
  • 已从服务引用中删除服务并清理解决方案。
  • 重建服务项目
  • 将其添加回服务引用
  • 清理并重建解决方案。

  • 为了在web.config中解决这个问题,我只需要添加EDOCX1[0]

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

    帮助我找到这个解决方案的是在调试时查看模块窗口,并看到我加载的ASP.NET DLL的模块窗口:二进制文件不是用调试信息生成的。


    我也遇到过同样的问题,但在VS2013中,一个网络应用程序出现了问题。对于我来说,答案是更新解决方案的生成配置:

  • 右键单击解决方案并选择"属性"
  • 选择调试配置
  • 在Trivet的"配置属性"下选择"配置"。
  • 选中要调试的每个项目的"生成"框
  • 一旦我这样做了,我的所有断点都开始工作。


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


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


    好的-我们开始:

    (在"Silverlight应用程序"中:请首先检查Silverlight是否已签入服务器项目"属性"中的"Web"-如果无法解决问题,请在下面尝试此操作)

    第一次做:首先运行:devenv.exe/resetsettings和1:在顶部菜单中单击调试标记2:单击选项和设置三:在"调试"和"常规"下找到"启用.NET框架源代码步进"4:把盒子打勾。5:现在所有符号都将被下载并重新配置:)

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

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


    从浏览器中打开Web应用程序URL,然后在vs.net ide use tools-->attachtoprocess中

    然后连接到aspnet_wp.exe。

    调试程序将开始工作


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


    我也遇到了同样的问题——为了让调试在Visual Studio中工作浪费了很多时间。

    它最终成为了Nuget——我有3个版本的newtonsoft.json(跨越7个c项目)。解决方案可以编译,但不能调试。

    我通过在Nuget的包管理器控制台中运行以下命令修复了该问题:

    pm>更新包newtonsoft.json


    我也有同样的问题。跟随者为我工作

    web application --> Properties --> Silverlight Applications

    如果在列表中没有看到您的Silverlight应用程序,请单击"添加",然后从"项目"下拉列表中选择您的Silverlight应用程序并添加它。


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

    还不确定原因,但其中一些是可调试的,一些不是,即使在程序集的引用设置中指定了正确的完整路径。

    这种不可预知的行为让我发疯了:)

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


    另一件可能有用的轶事-

    当我的一个项目使用发布输出文件夹中的文件引用时,我遇到了这个问题。当构建结果放在goods文件夹中时,这些发布的DLL将覆盖调试DLL。

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

    ..\..\Core\Goods\$(Configuration)\MyFramework.dll

    而不是

    ..\..\Core\Goods
    elease\MyFramework.dll


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

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


    我使用的是vs 2008,我得到了这个错误。我在这里和其他一些网站上尝试了所有其他建议,但没有任何效果。

    解决方案非常简单,本页还提到了其他两个解决方案,使我处于正确的位置。

  • 转到"项目"菜单并单击"属性"(也可以在解决方案资源管理器中右键单击项目名称并选择"属性")。

  • 选择左侧的"编译"选项卡。

  • 在"构建输出路径:"文本框中,确保文本框中有"bin"。

  • 在我的情况下,它指向网络上的另一个bin文件夹,这就是导致断点失败的原因。您希望它查看项目的当前bin文件夹。


    如果没有命中断点,请删除.xap文件。在您的project.web/clientbin中,删除您的project.xap。我已经尝试过以上所有的方法,但每次都会遇到这个问题。删除后也要清理项目。


    请检查承载Silverlight XAP的Web(ASP.NET)项目的Web属性。转到承载Silverlight XAP的Web项目->属性->Web->调试程序部分->确保选中Silverlight复选框。

    enter image description here


    无论如何,把这个记下来,因为它不是一个答案,但对于我来说,这个断点没有被击中的问题,只是自己解决了。在删除临时文件、重新启动、重新安装、在调试设置无效的情况下放火数小时后,它突然开始工作。我正处于精神错乱的边缘,无缘无故,我们撞上了一个断点。我喜欢反复无常的虫子。


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

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


    我试了很多东西。什么对我有用。我右键单击该项目,使Silverlight应用程序成为"设置为启动项目"。然后我尝试运行它(显然失败了,因为它依赖RIA服务来运行一个没有运行的Web服务器)然后我将Web项目重置为启动项目。嘿,普雷斯托……一切正常。


    如果您对Silverlight项目有问题,解决方案可能相当简单。根据我在许多情况下的经验,由于新的".xap"文件没有部署到临时文件夹(内部vs cassini或IIS Express),调试符号没有被加载。在这种情况下,完全重建或重置vs设置没有帮助。最简单的解决方案就是删除浏览器中的Internet临时文件。如果您使用IE进行Silverlight开发和测试,我建议您打开"退出时删除浏览历史记录"选项,以便将来不会出现此类问题。


    这是一个非常有用的线索,一个针对这个有害问题的清单。对我来说,工作的是交换到IE。我花了一段时间才意识到,由于我已经在使用IE,我已经设置了项目的Web属性,因此开始操作是启动扩展程序。

    C:程序文件(x86)Internet Exploreriexplore.exe

    使用命令行参数

    http://localhost/myproject-私人

    我需要-private标志来停止IE缓存我正在处理的SWF。从"启动外部程序"切换回"特定页"修复了我的"未加载符号"问题。


    我有这个问题,但在我的例子中,这是因为我试图调试的模块加载延迟。我有一个链接到我的主项目的DLL,我正在调试它。只有在调用主应用程序中的某些函数时才会调用dll,因此在调用这些函数之前,VS2010不会加载模块。

    当我开始这个项目时,我收到了这个消息,但是当我执行这个函数时,调试器已经加载了模块和相关的调试信息。

    这个线程帮助了我很多:http://geekswithblogs.net/dbutscher/archive/2007/06/26/113472.aspx


    此答案与Silverlight无关,但一般错误是:当前不会命中断点。没有为此文档加载符号。一个noob错误是项目没有在配置管理器中设置为调试。值得检查


    如果应用程序禁用调试,这是一个常见问题,并且如果在web.config上有多个转换,则经常会遇到此问题…解决此问题的一种方法是转到构建>配置管理器,并确保调试配置已设置为启动…从测试一个转换到另一个转换是很常见的,因此在特定的点上会失去中断的能力。


    我采取了最简单的方法,实际上在我的多个项目解决方案中,包括一个类库,我遇到了一个由类库项目创建的.dll文件的问题,它不允许我在执行时有断点,因为它不是出于某种原因生成的,我单独构建了该项目并引用了它的输出.dll,现在E断点功能正常

    不确定,也许这对你有帮助;如果不是你,那就是像我这样的新朋友,因为它对我有用:)


    一种可能的情况是,如果您的ASP项目引用应用程序(而不是dll)中的某些代码,则符号将不会被加载。

    在调试代码时,我不得不暂时将引用的应用程序更改为类库。


    我所做的是解决这个问题,在我的断点没有触及的页面,我选择了文件夹>添加一个现有项目,然后从它的保存路径中选择项目。这允许断点开始工作。


    如果不调试最新的可执行文件,则在远程调试时也会出现此错误。当您进行远程调试时,不要忘记在本地开发人员计算机上构建之后将新代码移到远程计算机上!


    有时右键单击断点--->位置--->检查是否允许源代码与原始版本不同对我有效。

    enter image description here

    [编辑]:有时,重建整个解决方案也会起作用。


    我通过附加到IIS进行调试。我抓取了production web.config中的一些新设置,忘记了更新web.config以启用调试。

    确保元素的调试设置为true。换言之:

    1
    <compilation defaultLanguage="c#" debug="true" targetFramework="4.0">

    我的问题是"返回"代码的中间部分。所以回来后,breakepoint就不起作用了。


    这就是我在克隆到不同的存储库之后为Visual Studio 2015解决问题的方法:

    在Visual Studio中:

  • 单击"工具"->"选项"
  • 在左窗格中,单击调试->符号
  • 点击"空符号缓存"