我如何找到“;由';xxx.dll';无法加载";例外

本文关键字:加载 quot 例外 dll xxx 何找 | 更新日期: 2023-09-27 18:27:20

过去一周我一直在追踪这个异常。

情况是:

我有一个用C#编写并在VisualStudio2010中构建的应用程序。该应用程序包含一个DLL,该DLL是非托管代码库的包装器。非托管代码是用C++编写的,并在Visual Studio 2008中生成。这是必需的,因为代码引用了额外的库(Qt),并且该代码针对WinCE版本5(由于现场支持的设备,这是必要的)。

我已经尝试了许多我在这里看到的建议,包括使用各种依赖助行器(VS2008-depends、dependency_worker和Dependz)以及其他工具,如SysInternal的Reflector和Process Monitor。

所有的工具要么显示没有问题(Reflector),要么显示在我的环境中过时的旧依赖项(Win 7),如DCOMP.DLL、GPSVC.DLL,&IESHIMS.DLL.

在调试器中,我可以逐步执行代码,直到实例化引用托管包装DLL的对象。它不会介入对象的实例化,而是立即抛出异常。

在Process Explorer(来自SysInternal)中,我可以看到加载的托管DLL以及必要的辅助DLL。在出现问题的Process Monitor(来自SysInternal)中,没有未找到的消息堆栈。它只是失败了。

如果您有任何想法或想法,我们将不胜感激。

我如何找到“;由';xxx.dll';无法加载";例外

@Hans Passat-感谢您对全局标志的提示。

这里有一篇关于使用这些工具的优秀博客文章。大多数谷歌引用的"显示加载程序堆栈"所指的gflags.exe程序是Windows设备驱动程序开发工具包(WinDDK)的一部分,它为您管理该帖子中提到的注册表设置。

使用"Show Loader Stacks"运行的输出确定本应在我的非托管DLL中的符号不在我使用的DLL中。

事实证明,我构建了错误版本的DLL。这是由于我对构建过程的理解不足(太多的版本以太多不同的方式构建)。

作业的标准工具:Dependency Walker