29

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

System.IO.FileNotFoundException:无法加载文件或程序集“核心,版本=0.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。

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

我还做错了什么?

4

6 回答 6

23

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

此外,Process Monitor在识别一般文件加载问题方面非常有用。

于 2011-01-05T15:52:51.787 回答
9

仅仅加入依赖遍历器和融合日志查看器对于同时具有本机代码和托管代码或动态加载本机代码的应用程序来说效果不佳。这是一篇很好的文章,逐步解释了如何使用涵盖这些场景的进程监视器来解决丢失(或无效权限)的装配错误:

调试无法使用进程监视器加载文件或程序集或其依赖项之一错误

这篇文章还包括一个工具来自动化其中的一些任务

于 2013-01-20T14:35:41.457 回答
5

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

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

Fusion 日志查看器上的 MSDN

于 2011-01-05T15:54:26.040 回答
2

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

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

于 2011-01-05T15:46:34.493 回答
0

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

于 2011-01-05T15:55:34.000 回答
0

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

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

于 2016-12-25T08:09:09.400 回答