【问题标题】:Referenced DLL Cannot Be Found When Running Application运行应用程序时找不到引用的 DLL
【发布时间】:2011-10-07 22:31:17
【问题描述】:

我遇到了一些我在工作中继承的代码的奇怪情况。他们的应用程序是一个多项目解决方案,其中几个解决方案是 MS 企业库的(代码)片段(不确定哪个版本)。

他们还有一个现有的 C++(非托管)应用程序,其中包含一堆 DLL。其中一个 DLL 构建在单独的解决方案中,包括 64 位和 32 位版本。

主应用程序引用了这个 DLL,并调用了几个静态函数(我甚至可以看到智能感知)。我可以编译和构建主应用程序 EXE,但是当我运行它时,我得到一个异常,即来自非托管代码的这个 DLL(我们称之为 CPlusPlusCode.dll 找不到:

未处理 FileNotFound 异常:无法加载文件或程序集“CPlusPlusCode.dll”或其依赖项之一。找不到指定的模块。

我很困惑,因为我可以编译代码,查看导入类的智能感知,并在对象浏览器中挖掘 DLL。我什至确保在 \bin\Debug 文件夹中有一个副本(尽管我不明白为什么会有所作为)。这是针对 Windows 窗体应用程序的。

另外,如果重要的话,我在不同项目中遇到了一些与 x86 和 x64 相关的构建问题;我认为(希望?)这与此无关,但我通过使用配置管理器将所有内容构建为 x64 解决了这个问题。

【问题讨论】:

  • 我没有调用堆栈;我在堆栈上看到的只是[External Code]
  • or one of its dependencies。如果您不知道它在寻找什么 DLL,请使用 SysInternals 的 ProcMon。

标签: c# dll desktop-application


【解决方案1】:

检查 GAC,如有必要,您可能需要在其中添加或注册 DLL。

【讨论】:

  • 如果我的 DLL 与可执行文件在同一路径中,为什么还不够?
  • 你的程序找不到文件,你把x86和x64文件都放在文件夹里了吗?
  • @Ramhound 我没有。我假设由于引用的 DLL 是 x64,我只需要将 x64 放在文件夹中。当它们具有相同的名称时,我如何放置它们?
  • 你必须给它们起不同的名字,这通常是怎么做的,至少如果你想要一个通用的二进制文件
【解决方案2】:

我在一个项目中遇到了这个问题,在 Visual Studio 中一切正常,而且我大部分时间都在我的机器上本地运行该项目。但是由于我需要非托管代码,因此我需要特别允许以正确的权限级别执行项目。

所以看看清单文件,是否存在足够的权限等。

【讨论】:

  • 也许您可以扩展一点,并提及要检查的内容和我正在寻找的内容的具体步骤;我对细节有点迷茫。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2016-02-01
  • 2019-05-21
  • 1970-01-01
相关资源
最近更新 更多