如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件

做了很多search之后,我仍然无法得到问题的解决scheme。

我有一个mdmp文件。 调用堆栈显示它正在使用mscorlib.ni.dll。 所以要获取函数信息,我需要得到它的pdb文件。

mscorlib.ni.dll的版本是2.0.50727.3655。 我相信它来自.Net Framework 3.5。

由于mscorlib.ni.dll是由ngen.exe生成的本机优化的dll,所以我需要使用ngen.exe createpdb生成此dll的pdf。

ngen.exe createpdb "C:\Windows\assembly\...\mscorlib.ni.dll" "C:\SymbolCache" 

结果如下:

  1. 在“C:\ Windows \ Microsoft.NET \ Framework64 \ v3.5”文件夹中找不到ngen.exe
  2. 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v2”中findngen.exe,但没有createpdb选项。
  3. 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319”中findngen.exe,它确实支持createpdb选项,但报告错误。

Microsoft(R)CLR本机映像生成器 – 版本4.0.30319.18408版权所有(c)Microsoft Corporation。 版权所有。 在本机映像“C:\ Windows \ assembly \ NativeImages_v2.0.507 7_64 \ mscorlib \ 5cd1c2848ff40eb0a8c149706ee394fa \ mscorlib.ni.dll”中find无效的头文件。 未指定错误(从HRESULTexception:0x80004005(E_FAIL))

所以我不知道如何获得Net Framework 3.5的mscorlib.ni.dll的pdb。

任何想法?

Solutions Collecting From Web of "如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件"

我有相同的错误信息,直到我意识到我从Framework 64文件夹调用ngen.exe。 显然,mscorlib.ni.dll不是64位的。

所以我使用了C:\Windows\Microsoft.NET\Framework\v4.0.30319文件夹中的ngen.exe的32位版本,并成功生成了PDB。

但是,mscorlib.ni.dll的路径包括...\NativeImages_v2.0.507 7_64\... ,这表明它是64位的,所以这可能是一个不同的问题。

就像Monsignor的回答一样,对我来说,解决方案是匹配比特(64位或32位)。 我的小型转储是64位,所以我不得不去的Framework64文件夹,并从那里运行ngen,它很好。 我最初得到了与此处所述相同的ngen错误(在本机图像中发现无效的头… E_FAIL),因为我在Framework文件夹而不是Framework64文件夹(facepalm)。

然而,即使ngen命令工作…在我的方案中,最终生成的pdb仍然不被VS 2013接受为匹配符号文件。