Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C“Visual Studio服务调试”;当前不会命中断点。本文件未加载任何符号”;_C#_Visual Studio_Windows Services_Visual Studio Debugging_Pdb Files - Fatal编程技术网

C# C“Visual Studio服务调试”;当前不会命中断点。本文件未加载任何符号”;

C# C“Visual Studio服务调试”;当前不会命中断点。本文件未加载任何符号”;,c#,visual-studio,windows-services,visual-studio-debugging,pdb-files,C#,Visual Studio,Windows Services,Visual Studio Debugging,Pdb Files,VisualStudio新手,C#新手。在Visual Studio 2017中构建一个名为Transactional Messaging的C#windows服务,该服务依赖于一个名为Outbound Messaging的项目。当我开始调试并尝试在出站消息文件上添加断点时,我得到 “当前不会命中断点。未加载任何符号 对于本文件” 据我所知,VS仅无法加载以下pdb文件:log4net.dll、Castle.Windsor.dll和Castle.Core.dll。在事务性消息传递服务中向文件添加断

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

“当前不会命中断点。未加载任何符号 对于本文件”

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

调试服务所遵循的步骤:

  • 通过windows服务小程序停止事务性消息服务
  • 使用调试文件夹中的
    installutil/u TransactionalMessaging.exe
    ,通过VS命令行卸载事务性消息服务
  • VisualStudio中的干净事务消息传递解决方案
  • 在VisualStudio中构建事务性消息传递解决方案(在解决方案资源管理器中右键单击解决方案的每个方面,然后分别构建)
  • 使用调试文件夹中的
    installutil TransactionalMessaging.exe
    ,通过VS命令行安装事务性消息服务
  • 通过windows服务小程序启动事务性消息服务
  • 在VS中,调试>附加到进程>事务消息传递
  • 尝试向出站消息服务中的文件添加断点,这会导致上述错误
  • 我已尝试解决此错误的步骤:

  • 调试>窗口>模块以手动加载每个模块的符号(找不到log4net.dll、Castle.Windsor.dll和Castle.Core.dll的pdb文件)
  • 在上述第2步和第3步之间完全删除bin和obj文件夹
  • 项目>项目属性>生成>高级>调试信息:完整(对于事务性消息和出站消息)

  • 我不确定这是因为对VS、C#或代码库缺乏了解。任何洞察都是值得赞赏的,我已经过了谷歌搜索阶段并发布一个新问题作为最后手段。

    您不能附加调试器,因为您没有这样做的权利。只需在注册表中翻转某个位,就可以正确地执行此操作

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

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

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

    还有一件事,在我看来,这是一个错误,也是一个麻烦,但根据微软的说法,这是出于设计(我已经问过他们):
    自Visual Studio 2015以来,项目B的编译不会自动包括修改后的引用程序集,在本例中,该程序集是程序集A。在B中的某个位置有一个A的本地副本,将使用该副本。与上面相同的结果:代码是最新的,但程序集是过时的。 您必须重建它,而不是编译

    还有一件事:

    您必须为调试模式进行编译。在发布模式下,默认项目设置不允许进行正确的调试,例如VS 2008中的设置。

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

    例如:

    • 在处理项目时,关闭VS,但在VS中打开了文件(选项卡)

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


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

    我在哪里输入此命令?我尝试在解决方案的debug文件夹中的visualstudio命令提示符中输入它,但没有输入luck@mel,您的意思是要在CMD中运行reg命令行吗?是的,必须在CMD shell中输入。您也可以使用regedit.exe并手动搜索密钥。您能在本地计算机中找到dll文件或pdb文件吗?请在工具->选项->调试->符号下启用符号服务器。此外,这些程序集是否从Nuget软件包manage安装?如果是,请确保您是否安装了正确/匹配的版本。