指定的模块无法找到 0x8007007E

23

在一个窗体的构造函数中,当我通过代码步进时,会调用在同一窗体中声明的一个方法。但是在我进入这个方法之前,就出现了一个System.IO.FileNotFoundException错误,提示“找不到指定的模块。(HRESULT异常:0x8007007E)”。我要进入的成员方法被声明为unsafe,因为它涉及到非托管的C++代码,但就像我说的,无论如何我都不能进入这个方法。

由于这听起来像是DLL依赖项问题,所以我运行了Dependency Walker。Dependency Walker只显示了SHLWAPI.DLL下的MPR.DLL存在问题。导致问题的方法是WNetRestoreConnectionA,但我从未调用过它。Dependency Walker FAQ 指出,这不是一个问题http://dependencywalker.com/faq.html。此外,这不是一个Web应用程序或其他类型的应用程序。很遗憾,我使用的是VS2005。

造成此问题的可能原因是什么?您有什么想法可以帮助我解决这个问题或者如何调试这个问题吗?

2个回答

17
你是在以分析模式还是静态分析模式运行依赖项分析器?我认为你需要使用分析模式。但我相信有更好的解决方案。
你可以尝试使用SysInternals ProcMon。这将允许您查看它正在尝试加载的文件,从那里您可能能够找出问题所在。
我的建议是启动它,然后关闭日志记录。到达异常即将发生的点,重新启用日志记录,在调试器中跨越错误生成步骤,然后再次禁用日志记录。这将使您只处理少量日志,否则它可能会变得非常难处理。

当我尝试在新安装的机器上运行一个以调试模式编译的混合模式程序集时,遇到了相同的问题。我成功地使用 ProcMon 解决了这个问题,发现我需要 DEBUG 版本的运行时库。 - Vincent Hubert
5
我已经在这里写了关于如何使用ProcessMonitor来解决混合模式程序集依赖问题的博客:http://www.sivachandran.in/2013/03/troubleshooting-module-could-not-be.html,希望它能帮到你。 - Sivachandran
采用这种方法,关键是要寻找一个文件的QueryOpen操作流,其结果为NAME NOT FOUND - John Go-Soco

15

当.NET运行时(JIT)要执行您即将调试的方法时,发生了错误,因为它找不到方法中使用的某个类型。

您无法进入的方法究竟是做什么的?它使用了哪些类型/方法?


非常好的答案,这似乎是问题所在。有一个类试图使用来自托管c++ dll的类,它期望该类在发布文件夹中,但实际上并不在那里。顺便问一下,当我点击类的“转到定义”时,为什么会跳转到这个疯狂的目录C:[PROFILE]\LOCALS~1\Temp\3292$[DLLNAME]$v2.0.50727[CLASS_NAME],而成员签名都在那里。我会给你+1,因为这比谷歌给我的更好,但没有声望。 - insipid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接