Visual Studio如何知道源文件是否与原始版本匹配?

我想出了.NET程序集.dll文件如何使用GUID( 博客 )映射到.pdb。 当我调试到一个程序集并询问源代码时,如果我导航到一个文件,它可能会告诉我源代码与原始代码不同。 怎么知道这个? 我原以为.pdb文件包含每个文件的校验和,但它似乎没有。 我发现转储调试信息的最佳工具是dia2dump 。 C ++ .pdb文件有MD5条目,但C#.pdb文件没有。

C ++转储
dia2dump -f dia2dump.pdb> dia2dump.pdb.files.txt

C#转储
dia2dump -f Autofac.pdb> Autofac.pdb.files.txt
dia2dump -all Autofac.pdb> Autofac.pdb.all.txt

在“全部”转储中是否有我遗漏的东西?

它必须使用校验和。 如果我在Module.cs中更改单个字符,我会得到:
在此处输入图像描述

在哪里可以找到.pdb中引用的源文件的校验和?

MD5校验和存储在每个源文件的.pdb文件中。 如果对上面的问题回答“否”,“您希望调试器还是使用它吗?”,它会打印出它正在寻找的校验和:

在此处输入图像描述

使用hex编辑器,您可以看到它绝对位于.pdb中。 我的下一个任务是弄清楚如何以编程方式访问它。 对于.pdb文件,我希望它返回所有源文件名及其MD5校验和。

在此处输入图像描述