【发布时间】:2011-11-15 15:31:50
【问题描述】:
每当我的应用程序尝试使用 DLL 中存在的函数时,我都会收到与可执行文件位于同一文件夹中的 .dll 的 System.DllNotFoundException。奇怪的是它只发生在一个用户的 PC 上。它在我的开发 PC 上运行良好,并且在我尝试过的一台非开发 PC 上运行良好。此外,文件夹中还有其他 DLL, 被发现并正确使用。有问题的 DLL 是一个本机库,我的应用程序通过另一个 DLL 引用它,该 DLL 是本机库的 c# 包装器。
我最初的直觉是,这个 DLL 必须引用一些其他库,而这些库在有问题的 PC 上不存在,但我无法想象这台 PC 可能缺少其他非开发 PC 具有的库。
所以我的问题是:有没有办法确定给定 DLL 文件的依赖关系?请记住,有问题的 DLL 是本机库(即不是托管代码),我无权访问它的源代码。如果事实证明没有缺少依赖项,还有什么可能导致这样的问题?
【问题讨论】:
-
您尝试加载的本机库是否会针对不同于托管进程(例如 x64)的 CPU 架构(例如 x86)进行编译?
-
@Darin Dimitrov:这通常会导致 BadImageFormatException。
-
@dtb,没错,这只是我想到的第一件事。
-
架构匹配。有问题的 PC 与我的开发 PC 具有相同的硬件和操作系统规格。
-
使用 SysInternals 的 ProcMon 解决此问题。您将看到程序在 PATH 上的目录中搜索丢失的 DLL。需要进入并行缓存的缺少运行时支持库是典型的顺便说一句。
标签: c# .net dll dependencies dllnotfoundexception