我有一个应用程序依赖于我组织中其他人构建的几个库,其中一个已停止工作。我在命令行中收到此错误:
Unhandled Exception: System.IO.FileLoadException: A procedure imported by 'XXX.dll' could not be loaded.
我打开 Dependency Walker 试图找出问题的根源,尽管我应该说我是 Dependency Walker 的新手,我真的不知道自己在做什么。这是我在日志窗口中看到的内容:
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
这似乎很简单,除了:
- 由于我对 DW 不熟悉,我似乎无法找到这个错误实际上指的是哪个模块
- 旧版本应用程序附带的同一个 DLL,仍然有效,在 Dependency Walker 中显示相同的内容
我发现新旧 DLL 之间的唯一区别是 KERNEL32.DLL 在较新的 DLL 中显示为红色,而函数 K32EnumProcessModules 显示为红色(未导出)。对于旧 DLL,这个相同的函数根本不会出现(绿色或其他)。
到目前为止总结一下:一个 DLL 有效,另一个无效;在 Dependency Walker 中两者都显示为“坏”,但只有一个函数 K32EnumProcessModules 显示为不好。我不知道这个函数是否是导致“未解决的导入”错误的原因,并想了解一下。
我认为可能导致此问题的唯一更改是将运行时从 .NET 2.5 升级到 .NET 4。此升级是出于与此 DLL 无关的原因进行的,不应影响它:DLL 确实不要对高于 2.5 的 .NET 组件进行任何调用,并且我组织中使用同一库的其他人报告说它在 .NET 4 上运行良好。
我意识到我提供的信息很少,主要是因为我不确定哪些信息可以帮助解决这个问题。如果您希望我进行测试以了解更多信息,请告诉我。