我正在开发一个应用程序(C#winforms),它依赖于供应商提供的与硬件通信的DLL。
如果我选择.NET 4(或更高版本)的目标框架,我在尝试调用引用的DLL中的方法时会收到以下消息:
DllNotFoundException:无法加载DLL' somelibrary.dll':对内存位置的无效访问。 (HRESULT异常:0x800703E6)
如果我选择.NET 2.0或3.0的目标框架,则不会发生错误。
我怀疑存在不兼容性或者库比.NET 3.0旧。
可能是因为.DLL启动了一个可执行文件,它充当应用程序和串行端口之间的通信处理程序。我已尝试将该应用程序设置为使用各种兼容模式,并以管理员身份运行,但没有成功。
如何避免此错误并针对更现代的.NET平台(如4.5或更高版本)? (或者我是否因为使用可能相当旧的DLL而陷入困境?)
应用程序平台目标是x86,我在Win7 x64上使用UAC在默认设置下进行开发。
答案 0 :(得分:1)
我不是说这是100%正确的解决方案,但这是我的想法,我相信是有效的。
当您缺少依赖项时,通常会发生此错误。在您的案例中依赖于somelibrary.dll
。在FW2.0中,大多数文件存储在一些Program files (x86)\Reference Assemblies...
中。我们知道有些东西在FW4 +中发生了变化,一些类被移动了,程序集不再在Program Files
中,而是通过Nuget下载。那么,[最有可能]发生的是,当你定位FW4.0 +时,你的应用程序开始寻找v4.0的依赖关系。我会使用像免费dotPeek
这样的反汇编程序来查看你所讨论的DLL中的引用。然后我会尝试在机器上找到这些,看看你是否没有与命名空间相关的版本冲突