.net C# VS2010项目中出现“PDB与图像不匹配”错误

dldeef67  于 2023-03-09  发布在  .NET
关注(0)|答案(6)|浏览(536)

我在代码库中使用库已经有一段时间了,我想直接调试到库级别。为此,我下载了源代码,并将该项目作为现有项目包含到我的C#解决方案中。然后,我让其他项目引用该项目,而不是下载的. DLL。
一旦引用了项目而不是DLL,我就通过调试器运行我的解决方案,并尝试单步执行一个可能会调用外部项目的函数调用,但它直接跳过了它。调试时,我打开“模块”窗口,看到DLL的符号状态显示为“PDB不匹配图像”,这可能是无法调试此项目的原因。
我的问题很简单,如果我的项目直接引用.csproj文件作为引用,为什么PDB不匹配图像?对于运行哪个版本,不应该有任何歧义。

8tntrjer

8tntrjer1#

我以前也遇到过这个问题,当我打开另一个引用DLL并使用其调试信息(PDB)的项目时。基本上,另一个项目在引用的项目中的PDB上放置了一个文件锁,当您编译或调试引用的项目时,它会悄悄地无法生成最新的PDB文件。
如果是这样,请确保没有其他应用程序正在运行或VS示例打开引用您的DLL,然后从BIN和OBJ文件夹下找到并删除PDB的所有副本,然后重新编译它。
希望能有所帮助。

ybzsozfc

ybzsozfc2#

有时候,这是因为您可能已经将项目构建为发布版本。
右键单击解决方案,然后单击“批量构建”〉检查所有项目,然后单击“清理”

vbopmzt1

vbopmzt13#

对我来说,这种情况发生在一个Excel加载项上。我去模块窗口看看为什么它没有加载我的dll。我查看了.dll所在的文件夹,然后转到那个位置。那个位置有一个.ini文件。打开它会显示我的应用程序的安装位置,结果是在“C:\Program Files\”中,而不是我的项目的bin\debug位置。
基本上我已经安装了一个旧版本的插件,当我试图调试这个项目时,它就被加载了。我卸载了旧的项目,删除了“C:\Users[user]\AppData\Local\assembly\etc ...”中旧的.dll位置,瞧,调试器加载了新编译的dll。

7hiiyaii

7hiiyaii4#

遇到了相同的问题,这是由于旧程序集和最新PDB。两者之间不匹配。程序集生成正确,但我的生成后dll复制脚本再次用旧程序集覆盖它。从生成后脚本中删除dll解决了问题。需要确保dll或PDB在调试最终开始时是最新的

fae0ux8s

fae0ux8s5#

这发生在我今天,当我试图调试记事本++ dll插件,我不得不改变构建输出目录到记事本的插件目录,并设置调试器启动记事本,而不是当前的项目dll继续设置断点。这让我抓狂,因为Visual Studio 2019告诉我,符号没有加载插件dll,我试图调试。
最后按照其他人的建议检查修改后的日期和时间,这让我意识到pdb不是最新的构建输出dll时间戳。我尝试重新构建解决方案,但生成的pdb具有相同的旧时间戳,尽管我手动删除它们并启动构建。因此,我所要做的就是通过删除白色来更改源代码并重新构建。瞧!这次我让调试器自动加载dll的符号并命中设置的断点。
也许清洗溶液也可能起作用了。

enxuqcxy

enxuqcxy6#

我发现将PDB复制到与EXE相同的目录中可以使它工作。
我正在做的一切从命令行。没有项目文件。
我将EXE复制到另一个目录作为发布过程。我一直在使用调试器,没有问题,然后它停止工作,没有明显的原因。在调试器中,在符号加载下,它会找到创建它的PDB文件,但会响应PDB与EXE不匹配。我删除了我所有的构建和.vs目录,重新启动并从头重新创建,这样我就知道PDB和EXE是同时创建的,它仍然失败了。
当我将.PDB复制到与.EXE相同的目录时,它工作了。

相关问题