如何通过查看转储文件找到无法加载的程序集?

时间:2016-08-10 14:03:43

标签: .net windbg sos

我在分析转储文件时看到了这一点:

0:000> !pe
Exception object: 0000000000ec2228
Exception type:   System.IO.FileNotFoundException
Message:          Could not load file or assembly 'MyTest.exe' or one of its dependencies. The system cannot find the file specified.
InnerException:   <none>
StackTrace (generated):
<none>
StackTraceString: <none>
HResult: 80070002

如何找出无法加载的程序集?我所拥有的就是这个转储文件,自从事件发生以来条件已经解决,所以此时应用程序正常运行。

1 个答案:

答案 0 :(得分:3)

我建议使用DependencyWalker找出所需的程序集,并将其与加载的程序集列表(lm)进行比较。

不幸的是,FileNotFoundException对细节没有多大帮助。

请注意,未解决的依赖项可能有很多原因(此列表不保证完整):

  • DLL不存在(显而易见的)
  • 加载DLL需要特殊权限(检查NTFS访问权限或以管理员身份运行程序)
  • 应用程序从被视为不受信任位置的网络共享运行
  • DLL的位数不匹配(如果这不会导致BadImageFormatException
  • 病毒扫描程序正在阻止对文件的访问

您可以尝试获取更多信息

  • !gle获取有关上一个错误的详细信息。这是一个本机函数,因此它可以提供有关.NET异常发生之前出错的其他见解。
  • 查看发生问题的计算机上的Windows事件日志。如果是权限问题,您可以在那里找到相关信息
  • 查看|的输出,看它是否是从网络共享中运行的
  • 如果问题可以重现,请使用Fusion Log Viewer [Stack Overflow] / [MSDN]找出问题所在
  • 如果问题可重现,请使用Process Monitor进行诊断,为应用程序的可执行文件名添加过滤器。将结果保存为XML并将其推送到ProcMon Analyzer(免责声明:我编写的免费工具)
  • 查看内部异常 - 但在您的情况下,没有任何