4

当您链接到一个非托管库(例如“A.dll”),该库又链接到另一个库(“B.dll”),并且 B.dll 丢失时,您将收到有关加载失败的运行时错误消息'B.dll'。

但是,当您从托管代码中 P/Invoke 到“A.dll”时,您会得到这种形式的一般异常:

未处理的异常:System.DllNotFoundException:无法加载 DLL 'A.dll':找不到指定的模块。

从托管代码执行 p/invoking 时,如何获得指出无法加载的特定非托管 dll 文件的错误消息?

4

4 回答 4

4

我认为没有任何特定的 API 可以用来查明为什么LoadLibrary(底层 Win32 API)对于“A.dll”失败。我建议使用Dependency Walker之类的工具来解决 DLL 加载错误。

于 2008-11-06T15:48:01.493 回答
0

我不确定您如何以异常的形式获得此信息。当我遇到这个问题时,我通常会尝试使用depends.exe 打开DLL。如果 DLL 只是从其当前位置加载,那么它非常好并且报告存在的缺失依赖项。

于 2008-11-06T15:46:35.537 回答
0

您将无法从异常中得到答案,但您可以通过 Process Monitor 来完成(通过大量工作)。本文讨论了如何以及还包括一个工具来扫描进程监视器日志以查找特定问题。

http://tech.blinemedical.com/debug-could-not-load-file-or-assembly-or-one-of-its-dependencies/

于 2013-03-18T13:32:18.223 回答
0

Fusion Log Viewer 是调试 .NET 应用程序中的程序集加载问题的好工具。

要识别一般文件加载问题,您可以使用 Process Monitor。

于 2013-12-18T20:59:29.597 回答