【问题标题】:"PDB does not match image" error in C# VS2010 projectC# VS2010 项目中的“PDB 与图像不匹配”错误
【发布时间】:2013-12-10 16:43:04
【问题描述】:

我在我的代码库中使用库已经有一段时间了,我想直接调试到库级别。为此,我下载了源代码并将该项目作为现有项目包含在我的 C# 解决方案中。然后我让我的其他项目引用该项目而不是下载的 .DLL。

一旦引用了项目而不是 DLL,我就通过调试器运行了我的解决方案,并尝试单步执行会调用外部项目的函数调用,但它直接越过了它。调试时,我打开“模块”窗口,看到DLL的符号状态显示“PDB与图像不匹配”,这可能是无法调试此项目的原因。

我的问题很简单,如果我的项目直接引用 .csproj 文件作为参考,为什么 PDB 与图像不匹配?对于要运行的版本,绝不应该有任何歧义。

【问题讨论】:

  • 尝试清洗溶液。
  • 您是否已将引用的项目配置为构建调试符号?
  • @SLaks 清理解决方案并不能解决问题。 .pdb 文件存在于构建文件夹中(连同 dll)
  • @DarrenKopp 绝对配置为构建调试符号。我验证了 pdb 文件也存在
  • PDB 文件上的时间戳与编译时间匹配?

标签: c# .net visual-studio-2010 visual-studio pdb-files


【解决方案1】:

在我打开另一个引用 DLL 并使用其调试信息 (PDB) 的项目之前,我遇到过这个问题。基本上,另一个项目在引用的项目中对 PDB 进行了文件锁定,当您编译或调试引用的项目时,它悄悄地无法生成最新的 PDB 文件。

如果发生这种情况,请确保您没有其他应用程序正在运行或没有打开引用您的 DLL 的 VS 实例,然后从 BIN 和 OBJ 文件夹下查找并删除 PDB 的所有副本,然后重新编译它。

希望对你有帮助。

【讨论】:

  • 这似乎是问题的一半。关闭可能正在使用这些 DLL/PDB 的任何其他东西似乎无济于事。但是,如果我用库 /bin 目录中的 dll 覆盖应用程序 /bin 目录中的 DLL/PDB 文件,事情就会按预期进行。因此,将文件复制到我的应用程序的 /bin 目录的方式似乎确实有问题。奇怪的行为。无论如何,这并不理想,但手动复制文件在短期内有效。谢谢
  • 这正是我的问题。我试图在 VS 在命令窗口中运行时对其进行调试。
  • @Chris 绝对正确。我刚刚也检查了一下,发现两个 DLL 的大小和修改日期不同,但应该是相同的。我在构建后事件中复制 DLL 和 PDB 文件,我猜它没有将最新的 dll 文件复制到目标文件夹。
  • 解决方案:我不得不停止 IIS 并构建项目。然后它按预期复制了我的所有文件。
【解决方案2】:

有时会发生这种情况,因为您可能已将项目构建为发布版本。

右键单击解决方案并单击“批量构建”>检查所有项目并单击“清理”

【讨论】:

    【解决方案3】:

    对我来说,这发生在 Excel 加载项上。我去了模块窗口,看看为什么它没有为我的 dll 加载。我查看了 .dll 所在的文件夹,然后去了那个位置。该位置有一个 .ini 文件。打开它会显示我的应用程序的安装位置,结果是在“C:\Program Files\”中,而不是我项目的 bin\debug 位置。

    基本上,我已经安装了一个旧版本的插件,它在我尝试调试项目时正在加载。我卸载了旧项目,删除了“C:\Users[user]\AppData\Local\assembly\etc...”中的旧 .dll 位置,瞧,调试器加载了新编译的 dll。

    【讨论】:

      【解决方案4】:

      面临同样的问题,这是由于旧的程序集和最新的 PDB。两者之间存在不匹配。 该程序集已正确构建,但我的构建后 dll 复制脚本再次用旧的覆盖它。 从构建后脚本中删除 dll 已解决问题。 最终开始调试时,需要确保 dll 或 pdb 是最新的

      【讨论】:

        【解决方案5】:

        今天我在尝试调试 notepad++ dll 插件时发生了这种情况,我不得不将构建输出目录更改为 notepad++ 的插件目录并将调试器设置为启动 notepad++ 而不是当前项目 dll 以继续设置断点。这让我发疯了,因为 Visual Studio 2019 告诉我没有为我试图调试的插件 dll 加载 SYMBOLS。

        最后按照其他人的建议检查修改的日期和时间,这让我意识到 pdb 不是最新的构建输出 dll 时间戳。我尝试重建解决方案,但生成的 pdb 具有相同的旧时间戳,尽管我手动删除它们并启动构建。所以我所要做的就是通过删除空白并重建来更改源代码。瞧!这次我让调试器自动为我的 dll 加载符号并点击设置的断点。

        也许清洁溶液也可能奏效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-06
          • 2017-11-23
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多