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

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

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

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

还有什么我做错了?

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

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

只是在依赖漫步者和融合日志查看器中进行操作,对于具有本机代码和托管代码或者动态加载本机代码的应用程序来说效果不佳。 这是一篇很好的post,逐步解释如何使用涵盖这些场景的进程监视器来解决缺失(或无效权限)程序集错误:

调试无法使用Process Monitor加载文件或程序集或其某个依赖项错误

该post还包括一个工具,可以自动执行某些任务

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

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

Fusion Log Viewer上的MSDN

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

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

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

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

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