【问题标题】:C# Visual Studio Service Debugging "The breakpoint will not currently be hit. No Symbols have been loaded for this document"C# Visual Studio 服务调试“断点当前不会被命中。没有为此文档加载任何符号”
【发布时间】:2017-04-26 18:46:44
【问题描述】:

Visual Studio 新手和 C# 新手。在 Visual Studio 2017 中构建名为 Transactional Messaging 的 C# windows 服务,该服务依赖于名为 Outbound Messaging 的项目。当我开始调试并尝试在出站消息文件上添加断点时,我得到了

"当前不会命中断点。没有加载任何符号 为这个文件”

据我所知,VS 仅无法加载以下 pdb 文件:log4net.dll、Castle.Windsor.dll 和 Castle.Core.dll。在事务性消息服务中向文件添加断点没有这个问题。我无法识别行为模式或永久修复,因此此时错误似乎是随机的。一分钟我想我找到了一个修复程序,当我在当天晚些时候尝试对同一错误使用该修复程序时,我没有运气。我怀疑最近的一次停电意外关闭了我的计算机,因为看起来 pdb 文件可以被缓存,但被告知这将是一个很长的机会。

调试服务的步骤:

  1. 通过 Windows 服务小程序停止事务性消息传递服务
  2. 使用 Debug 文件夹中的 installutil /u TransactionalMessaging.exe 通过 VS 命令行卸载 Transactional Messaging Service
  3. Visual Studio 中的清洁事务性消息传递解决方案
  4. 在 Visual Studio 中构建事务性消息传递解决方案(有一次修复是在解决方案资源管理器中右键单击解决方案的各个方面并单独构建)
  5. 使用 Debug 文件夹中的 installutil TransactionalMessaging.exe 通过 VS 命令行安装 Transactional Messaging Service
  6. 通过 Windows 服务小程序启动事务性消息服务
  7. 在 VS 中,调试 > 附加到进程 > 事务性消息传递
  8. 尝试向出站消息服务中的文件添加断点,这会导致我出现上述错误。

我尝试解决此错误的步骤:

  1. 调试 > Windows > 手动加载每个模块符号的模块(找不到 log4net.dll、Castle.Windsor.dll 和 Castle.Core.dll 的 pdb 文件) picture of modules
  2. 完全删除上述步骤 2 和 3 之间的 bin 和 obj 文件夹
  3. 项目 > 项目属性 > 构建 > 高级 > 调试信息:完整(对于事务性消息传递和出站消息传递)

我不确定这是对 VS、C# 还是代码库缺乏了解。感谢任何见解,我已经过了谷歌搜索阶段并发布一个新问题作为最后的手段。

【问题讨论】:

  • 您能在本地机器中找到 dll 文件或 pdb 文件吗?请在 TOOLS->Options->Debugging->Symbols 下启用 Symbols Server。另外,这些程序集是否是从 Nuget 包管理安装的?如果是,请确认您是否安装了正确/匹配的版本。

标签: c# visual-studio windows-services visual-studio-debugging pdb-files


【解决方案1】:

当我更改项目 A 中的代码并忘记编译它时,我通常会收到此消息。
另一个引用项目 A 的项目 B 在屏幕上显示了 A 的最新源代码,但以 A 的过时程序集开始。因此它无法启用断点,因为代码与程序集不匹配。

还有一件事,在我看来这是一个错误和麻烦,但根据 MS 的设计(我已经问过他们):
从 Visual Studio 2015 开始,项目 B 的编译不会自动包含修改后的引用程序集,在此示例中为程序集 A。在 B 的某处有一个 A 的本地副本,而是使用它。与上面相同的结果:最新的代码,但过时的程序集。 您必须重建它,而不是编译!

还有一件事:
您必须针对调试模式进行编译。 在发布模式下,默认项目设置不允许正确调试,例如在 VS 2008 中所做的那样。

【讨论】:

    【解决方案2】:

    您不能附加调试器,因为您没有这样做的权利。只需翻转注册表中的某个位,您就可以做到这一点。

    See my earlier Answer:

    同时以管理员身份启动 VisualStudio 并允许进程可以 由其他用户自动调试:

    reg add "HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}" /v AppIDFlags /t REG_DWORD /d 8 /f
    

    【讨论】:

    • 我在哪里输入这个命令?我尝试在解决方案的调试文件夹中的 Visual Studio 命令提示符中输入它,但没有成功
    • @mel,你的意思是要在CMD里运行reg命令行吗?
    • 是的,它必须在 CMD-shell 中输入。您也可以使用 regedit.exe 并手动搜索密钥。
    【解决方案3】:

    如果上面没有任何帮助,请确保您的文件是从相关项目中打开的,而不是从另一个(旧)项目中打开的。

    例子:

    • 您正在处理一个项目,关闭了 VS,但您在 VS 中打开了文件(选项卡)。

    • 将您的项目复制到新文件夹并打开解决方案。文件(选项卡)将从旧目录加载,如果要调试,则在关闭它们并从当前文件夹重新加载它们之前无法调试。

    我非常接近重新安装我的 VS,因为其他答案对我没有任何帮助,但幸运的是我在我的项目中意识到了这一点,我现在可以调试了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2011-08-13
      • 2010-09-28
      • 2015-01-24
      • 2011-09-15
      • 2015-01-23
      • 2014-11-13
      相关资源
      最近更新 更多