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