当你链接到一个非托管库(比如'A.dll')而这个库反过来链接到另一个库('B.dll'),并且缺少B.dll时,你会得到一个运行时错误消息无法加载'B.dll'。
但是当您从托管代码P / Invoke到'A.dll'时,您将获得此表单的一般例外:
未处理的异常:System.DllNotFoundException:无法加载DLL“A.dll”:找不到指定的模块。
当从托管代码调用时,如何获取一条错误消息,指出无法加载的特定非托管dll文件?
答案 0 :(得分:4)
我不认为您可以使用任何特定的API来查明“A.dll”的LoadLibrary
(基础Win32 API)失败的原因。我建议使用Dependency Walker之类的工具来解决DLL加载错误。
答案 1 :(得分:0)
我不知道你怎么能以异常的形式得到这个。当我遇到这个问题时,我通常会尝试用depends.exe打开DLL。它非常好,如果简单地从它的当前位置加载DLL,则报告缺少依赖关系。
答案 2 :(得分:0)
您将无法从异常中获得答案,但您可以通过Process Monitor完成(通过大量工作)。本文讨论了如何以及还包括扫描Process Monitor日志以查找特定问题的工具。
http://tech.blinemedical.com/debug-could-not-load-file-or-assembly-or-one-of-its-dependencies/
答案 3 :(得分:0)
Fusion Log Viewer是调试.NET应用程序中的程序集加载问题的好工具。
要识别常规文件加载问题,可以使用Process Monitor。