【问题标题】:System.IO.FileNotFoundException was unhandled Message=“The specified module could not be found. (Exception from HRESULT: 0x8007007E)”System.IO.FileNotFoundException 未处理 Message=“找不到指定的模块。 (来自 HRESULT 的异常:0x8007007E)”
【发布时间】:2012-01-25 02:48:30
【问题描述】:

我正在查看对我来说是新的代码。我在一个名为 UI 的项目中有 c++ 代码,它具有许多依赖项,可以正确构建并且不会返回任何错误。在 Visual Studio 2008 中的相同解决方案中,我创建了一个新的 C# windows 窗体项目并添加了对 UI 项目生成的 dll 的引用,并添加了“使用”语句。我想要做的是引发在 UI 项目中定义的对话框之一,所以我有类似的代码

UIDialog uIDialog = new UIDialog(); 
uIDialog.Show();

构建。

当我在调试中运行我的项目时,当它进入“新”部分时,我得到了上面的异常 - 没有关于缺少的模块是什么的信息。

有没有什么方法可以在不深入 UI 项目中的代码的情况下找出缺失的模块是什么?

(我试图重新表述这个问题,以免它被关闭。如果有人可以给出“不,没有”的明确答案,我会发现这非常有帮助。也感谢那些关闭之前的版本。)

编辑:

System.IO.FileNotFoundException occurred
  Message="The specified module could not be found. 
(Exception from HRESULT: 0x8007007E)"
  Source="ui"
  StackTrace:
   at ui.UIDialog.Startup()
   at ui.UIDialog..ctor() in c:\..\ui\UIDialog.h:line 61
InnerException:

这就是问题所在,任何地方都没有明显的有用信息!

这不是 32/64 位问题 - 在到达这里之前,我遇到了典型的“BadImageFormatException”,所以为了解决这个问题,我强迫一切都是 32 位的。

【问题讨论】:

  • 该异常消息中应该包含堆栈跟踪。发布这可能会让我们更接近找出问题所在。此外,仅查看您提供的内容,我会冒昧地推测这是 32 位与 64 位的问题。是否有可能将一个程序集编译为 32 位而另一个程序集编译为 64 位/任何 CPU? 32位代码不能调用64位代码,反之亦然。
  • 我同意@Cody。听起来像是平台目标问题。异常通常包含更多信息,因此将 exception.ToString() 的结果发布到您的问题应该有助于诊断问题。
  • 我不想说出显而易见的事实,但是UIDialog.h 在第 61 行说了什么?
  • Startup() - 所以我猜 JIT 正在那里加载需要的东西,但没有告诉我它是什么。

标签: c# c++ visual-studio-2008 dll module


【解决方案1】:

您可以在引用的 dll 上使用 MSIL 反汇编程序并检查清单中的所有 dll 依赖项。反汇编程序是 Windows SDK 工具的一部分。

或者总是有 DependencyWalker,虽然我已经很多年没用过了。

【讨论】:

  • 手动检查所有依赖项是我试图避免的(尽管这是我最后所做的)。不过谢谢!
【解决方案2】:

您可以turn on Fusion logging 来查看加载程序正在做什么并找出缺少的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多