c# - 当前不会命中断点还没有为该文件加载任何符号 - 断点不会被打中。 在Silverlight应用程序中没有为该文档加载符号




当前不会命中断点找不到相应的位置 (20)

调试 - > 附加到进程 - >
选择调试这些代码类型:选项 - >
选择托管v3.5,v3.0,v2.0托管v4.5,v4.0

好的,我有:

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

昨天,突然间,我得到了'断点不会被击中。 没有符号已经加载这个文件。' 消息出现在IDE中,但它只影响Web应用程序,我可以调试Silverlight和Winform应用程序。

我试过/做了什么来摆脱这个信息:

  • 重置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以查找错误/类似问题
  • 休息7小时。

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


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

然后附加到aspnet_wp.exe。

调试器将开始工作


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

查看Common Properties - > Startup Project

选择多个启动项目

选择需要调试的项目上的“启动”操作。


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

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

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

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

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


对我来说问题原来是在Debug配置中打开了Properties-> Build-> Optimize code复选框。 关闭它,重新建立,调试正常。


对我而言,问题在于我在项目设置的“生成”选项卡中启用了“优化代码”。


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

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

2-您正在调试同一应用程序的另一个版本。 例如,您将一个先前构建的应用程序与当前版本的代码相结合以进行调试,而无需重新构建它。

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

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


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

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

项目A有Main。 它引用了项目B.您的断点在项目B中未被命中。将项目B的构建输出路径中的DLL和PDB文件复制到项目A的构建输出路径。 然后运行解决方案。 破发点现在将被击中。

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


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

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

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

我通过从“ 参考文件”文件夹中删除所有具有源代码项目的程序集,并且保持对共享程序集版本信息的良好跟踪来解决此问题。


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


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

我将内置web服务器更改为在固定端口下运行,并将我的“启动URL”调整为使用该端口。 项目 - >属性 - > web - >“服务器”部分 - >“使用Visual Studio Development Server” - >特定端口


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

  1. 右键单击解决方案并选择属性
  2. 选择调试配置
  3. 在天鹅绒的“配置属性”下选择“配置”
  4. 选中您要调试的每个项目的“Build”框

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


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

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

我通过在Nuget的包管理器控制台中运行以下内容来解决该问题:

PM>更新包Newtonsoft.Json


我遇到了同样的问题,并在Google搜索后发现了两个典型的解决方案:

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

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

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

编辑:

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

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

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


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

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

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

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

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


每当我遇到这个特定的错误时,事实证明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项目文件的目录相同。


要在Web.config中解决这个问题,我只需要添加debug="true"

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

什么帮助我找到这个解决方案一直在调试时查看Modules窗口,并看到为我的ASP.NET DLL加载了我: Binary没有用调试信息构建。


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

在“输出”部分,在调试信息下拉菜单中选择“全部”





iis