如何调试“无法加载文件或程序集”运行时错误?

时间:2011-01-05 10:15:49

标签: c# .net load runtime ikvm

我有一个使用IKVM转换的Java库的项目。我添加了创建的DLL以及所有可能的IKVM DLL作为我的项目的引用,但是当我运行它时,我得到以下运行时错误:

  

System.IO.FileNotFoundException:无法加载文件或程序集'core,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件。

我不确定如何调试此错误。有没有办法确切知道缺少哪种类型?从描述我猜这是生成的DLL(来自Java lib),但我已正确添加它作为参考。

我还做错了什么?

6 个答案:

答案 0 :(得分:21)

您可以使用Fusion Log Viewer调试.NET应用程序中的程序集加载问题。

此外,Process Monitor在识别常规文件加载问题时非常有用。

答案 1 :(得分:6)

只是因为依赖漫步者和融合日志查看器不能很好地适用于具有本机代码和托管代码或者动态加载本机代码的应用程序。这是一篇很好的文章,一步一步解释如何使用涵盖这些场景的流程监视器解决缺失(或无效权限)程序集错误:

Debug Could not load file or assembly or one of its dependencies error with Process Monitor

该帖子还包括一个自动执行此任务的工具

答案 2 :(得分:5)

您可以使用Fusion Log Viewer(Microsoft SDK中提供)进行诊断。 在Administrator中启动它并激活设置中的日志。

它将记录有关您的引用加载的所有信息(及其所有引用)。 它将明确告诉您缺少哪个引用以及它在哪里搜索它。

MSDN on Fusion Log Viewer

答案 3 :(得分:2)

有一个名为Dependency Walker的程序,它允许您查看给定PE文件(dll,exe,ocx ...)的依赖关系。

这个错误真的很烦人,很难调试。你必须确保你的dll存在以及这个dll具有的任何依赖。这个关键点通常是头痛发作的地方。

答案 4 :(得分:0)

使用ProcessMonitor(来自Sysinternals Suite),您可以在抛出异常之前查看您的进程正在寻找的DLL。

答案 5 :(得分:0)

依赖性walker静态地解析本机PE文件所需的所有DLL并标记缺少的依赖项,而Fusion Log Viewer在运行时捕获托管代码中的程序集绑定问题。对于动态加载本机DLL的托管.Net代码,这些工具是不够的。

以下是关于如何使用Process Monitor调试“无法加载文件或程序集”问题的博文:https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi