【问题标题】:DllNotFoundException, but DLL is thereDllNotFoundException,但有 DLL
【发布时间】:2009-08-07 19:10:57
【问题描述】:

所以我使用了一个用于硬件随机数生成器的 SDK,它提供了一个名为 PsyREG.dll 的 dll 用于与之交互,以及一些用于使用 dll 中的方法的 c# 源代码。

它过去一直有效,但不知何故停止了工作。我的手有点束缚,因为我目前实际上无法访问相关设备,所以我无法尝试很多事情......

但是,奇怪的是。 dll在那里,它一直在同一个地方。啊事实上File.Exists("PsyREG.dll")返回true,我已经仔细检查过,这与提供的c#源导入它的方式完全相同,例如[DllImport("PsyREG.dll")].

有什么想法吗?

【问题讨论】:

标签: c# dllnotfoundexception


【解决方案1】:

可能此 DLL 有一些未注册或与您的应用程序不在同一文件夹中的依赖项。

【讨论】:

  • 谢谢,就是这样。还有一些其他的东西需要,但由于一些原因,我不想检查(包括它说它不能加载 PsyREG.dll,而不是不同的文件)
  • 这样的时候是我突破 Reflector 的时候。它可以显示依赖关系。特别是,它可以向您显示哪些未找到。
  • 真的吗? Reflector 是否找到非托管依赖项?那个选项在哪里?
  • 我使用 DependancyWalker,如果失败(即动态加载 DLL),FileMon 会简单地观察搜索失败的位置。
【解决方案2】:

http://www.dependencywalker.com/有问题的系统上打开DLL

【讨论】:

【解决方案3】:

也许您应该检查一下您是否需要特定产品版本的 dll,并确保产品版本仍然正确匹配。

【讨论】:

    【解决方案4】:

    我遇到了这个问题并解决了以下问题:

    如果您在 /MD 下编译,则存在对 msvcr90.dll 的依赖关系。 尝试使用 /MT 编译代码。

    Project properties > C/C++ > Code Generation > Runtime Library: /MT

    【讨论】:

      【解决方案5】:

      我正在处理关于我的一个 DLL 的相同异常(我们称之为A)。 C# 崩溃了,因为它声称找不到此 DLL (A)(虽然它与可执行文件位于同一文件夹中)。

      原来问题是由A 依赖于另一个DLL(称为B)引起的。 B 不在路径中,因此 A 在需要时无法加载它。由于B 需要一大堆其他DLL,解决方案是将B 的目录添加到PATH 环境变量中。

      有趣的是,C# 是如何崩溃并显示未找到 A 的错误,而实际上未找到 B...

      【讨论】:

      • 你能解释一下the solution was to add B's directory to the path environment variable 部分吗?我目前正在努力解决几乎相同的问题,唯一的区别是我的 Dll 需要一些 *.so 文件而不是其他 Dll。
      • @Stefan 我相信在 Linux 终端中,您会使用 export PATH=$PATH:YOUR-SO-FILE-PATH 将目录 YOUR-SO-FILE-PATH 添加到您的 PATH 环境变量中。这样,当你的so文件需要加载的时候,会搜索PATH指定的路径,找到那个so文件。
      • 谢谢,我已经尝试过了,但它并没有真正奏效。我在其他地方阅读了将我的 dll 移动到 /usr/lib 目录(是的,它确实是一个 linux 系统)并且无需任何进一步配置即可工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 2022-08-08
      • 2012-07-30
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多