这可能归因于我对PDB文件和构建过程的误解,而不是任何特定问题,但是我一直在努力寻找其他地方的好答案。
最近,我们成为了优秀的小型开发人员,并开始将pdb文件建立索引并将其存储在中央符号服务器(TFS的所有部分)上。问题在于我们的PDB文件似乎未包含所有源信息。
尝试导航到Visual Studio中的源时,将找到我们程序集的pdb文件,如输出窗口所示:
PdbNavigator: Downloader: file://server/Symbols/my.assembly.pdb/1DB3F79EA3094EAAADFC6CDE6515FC871/my.assembly.pdb -> ok, 251 KB
PdbNavigator: No debugging information found on symbol servers for my.assembly, Version=1.0.1.1206, Culture=neutral, PublicKeyToken=4cd79aeab39b919b
但与此同时,它说没有找到消息来源。如果使用Windows SDK中的某些工具,则可以看到PDB文件不包含有关项目中约30%的源文件的信息。
我想我读过某个地方,PDB文件仅包含项目中实际使用的类的源,但是肯定会给任何API类型的程序集造成一个大问题,其中只有在其他部分使用时,多个类可能在程序集中不起作用你的项目?
如果有人可以阐明这一点,请告诉我。
谢谢。
最佳答案
PDB(通常)不存储源代码-它包含“文档”列表和“方法信息”,其中“文档”列表是源代码文件名,“方法信息”将源代码行映射到汇编或二进制文件中的偏移量。当程序集的签名和生成日期与PDB文件中的签名和生成日期匹配时,PDB就会匹配。可能是MyAssembly.pdb具有正确的版本,但是签名和/或构建日期不匹配。
据我所知,该签名并未公开,但是您可能会在Internet上找到一些代码,该代码说明如何读取PE签名和PDB签名,以便进行比较。
关于visual-studio - PDB文件不包括所有.net源信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16348086/