我有一个包含多个项目的解决方案,但现在只运行两个。项目 1 在发布模式下作为 Windows 服务运行,但在调试模式下作为控制台应用程序运行。项目 2 是一个 MMC 管理单元(输出类型 = 类库)。它们通过 WCF 进行通信。
时间A
当我昨天在全新构建后第一次开始调试时,我的调用堆栈窗口显示如下:
lines in service...
[External Code]
--Transition from Client to Server --
lines in client...
我可以双击任何一行以转到该行。我可以在任何一个项目中设置断点,它们会被击中。
时间 B(当天晚些时候)
我开始在客户端(项目 2)中看到断点上的标志,指示“断点当前不会被命中。源代码与原始版本不同”,即使我刚刚重建了所有项目。我做了一些代码更改,但(据我所知)没有项目或构建更改。我做了一个“干净”的解决方案,但这没有帮助。调用堆栈的工作方式仍与 TIME A 期间相同。
时间 C(第二天——今天早上)
我重新启动。我删除了所有 obj 和 bin 目录。我重建了整个解决方案并启动了希望新的开始会改善这种情况。现在情况更糟了。断点标记为“当前不会命中断点。没有为此文档加载任何符号。” 调用堆栈已恶化为将客户端显示为外部代码:
lines in service...
[External Code]
--Transition from Client to Server --
[External Code]
- 如果我在调用堆栈中选择显示外部代码,它会列出来自客户端程序集的行(当然与系统程序集混合),但全部显示为灰色。在模块窗口(调试 >> 窗口 >> 模块)中未列出客户端程序集。
- 如果我从调用堆栈中的一行中选择符号加载信息,它会显示 5 个不同位置的“找不到或打开 PDB 文件”,最奇怪的是在我的项目的 obj/Release 目录下——而不是 obj/Debug 目录—— - 即使我的项目设置为调试配置。
- 如果我从调用堆栈中的一行中选择加载符号,然后在我的 obj/Debug 或 bin/Debug 目录中选择 pdb 文件,它会报告"A matching symbol file was not found in this folder"。
- 配置管理器显示所有项目都设置为调试配置,并且都包含在构建中。
我已经查看了类似的 SO 问题,这帮助我找到了上述所有要检查的内容,但还没有找到任何符合我的情况的押韵或理由。
如何从谵妄中拯救 Visual Studio 并恢复丢失的符号?