如何通过查看转储文件找到无法加载的程序集?
How do I find which assembly could not be loaded by looking at the dump file?
我在分析我的转储文件时看到了这个:
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
如何找出无法加载的程序集?我所拥有的只是这个转储文件,并且自事件发生以来问题已经解决,因此该应用目前 运行 正常。
我建议使用 DependencyWalker 找出需要哪些程序集并将其与已加载程序集列表 (lm
) 进行比较。
不幸的是,FileNotFoundException 在细节方面不是很有帮助。
请注意,可能有很多原因导致未解决的依赖关系(此列表不保证完整):
- DLL 不存在(显而易见)
- 加载 DLL 需要特殊权限(检查 NTFS 访问权限或运行程序作为管理员)
- 该应用程序 运行 来自被认为不受信任的位置的网络共享
- DLL 的位数不匹配(如果这不会导致
BadImageFormatException
)
- 病毒扫描程序正在阻止对文件的访问
您可以尝试获取更多信息
!gle
获取有关上一个错误的详细信息。这是一个本机函数,因此它可能会提供有关 .NET 异常发生之前出现的问题的更多见解。
- 查看出现问题的机器上的 Windows 事件日志。如果是权限问题,您可以在那里找到信息
- 查看
|
的输出,看看它是否是来自网络共享的 运行
- 如果问题可重现,请使用Fusion Log Viewer [Stack Overflow] / [MSDN]找出问题所在
- 如果问题可重现,请使用 Process Monitor to diagnose, add a filter for your application's executable name. Save the results as XML and push it through ProcMon Analyzer(免责声明:我编写的免费工具)
- 查看内部异常 - 但在您的情况下没有任何异常
我在分析我的转储文件时看到了这个:
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
如何找出无法加载的程序集?我所拥有的只是这个转储文件,并且自事件发生以来问题已经解决,因此该应用目前 运行 正常。
我建议使用 DependencyWalker 找出需要哪些程序集并将其与已加载程序集列表 (lm
) 进行比较。
不幸的是,FileNotFoundException 在细节方面不是很有帮助。
请注意,可能有很多原因导致未解决的依赖关系(此列表不保证完整):
- DLL 不存在(显而易见)
- 加载 DLL 需要特殊权限(检查 NTFS 访问权限或运行程序作为管理员)
- 该应用程序 运行 来自被认为不受信任的位置的网络共享
- DLL 的位数不匹配(如果这不会导致
BadImageFormatException
) - 病毒扫描程序正在阻止对文件的访问
您可以尝试获取更多信息
!gle
获取有关上一个错误的详细信息。这是一个本机函数,因此它可能会提供有关 .NET 异常发生之前出现的问题的更多见解。- 查看出现问题的机器上的 Windows 事件日志。如果是权限问题,您可以在那里找到信息
- 查看
|
的输出,看看它是否是来自网络共享的 运行 - 如果问题可重现,请使用Fusion Log Viewer [Stack Overflow] / [MSDN]找出问题所在
- 如果问题可重现,请使用 Process Monitor to diagnose, add a filter for your application's executable name. Save the results as XML and push it through ProcMon Analyzer(免责声明:我编写的免费工具)
- 查看内部异常 - 但在您的情况下没有任何异常