【问题标题】:How does .NET target framework affect loading of third-party DLLs?.NET 目标框架如何影响第三方 DLL 的加载?
【发布时间】:2017-08-08 18:58:29
【问题描述】:

我正在开发一个依赖于供应商提供的与硬件通信的 DLL 的应用程序(C# winforms)。

如果我选择 .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。

【问题讨论】:

  • 您要加载的是 .net 程序集吗?你试过用ildasm.exe打开它吗? fuslogwv.exe是否提供了其他信息?
  • @ironstone13 我将使用您建议的工具进行进一步调查。我不确定程序集的类型。

标签: .net visual-studio dll


【解决方案1】:

我并不是说这是 100% 正确的解决方案,但这是我认为有效的想法。

当您缺少依赖项时,通常会发生此错误。在您的情况下依赖于您的somelibrary.dll。在 FW2.0 中,大多数文件都存储在一些 Program files (x86)\Reference Assemblies... 中。我们知道 FW4+ 中有些东西发生了变化,一些类被移动了,程序集不再在 Program Files 中,而是通过 Nuget 下载。那么,[最有可能]会发生什么,当您以 FW4.0+ 为目标时,您的应用程序开始寻找 v4.0 的依赖项。我会使用免费的dotPeek 之类的反汇编程序来查看您在相关DLL 中的引用。然后我会尝试在机器上找到这些,看看你是否没有与命名空间相关的版本冲突

【讨论】:

  • 感谢您的回答/建议。我对 dotPeek 不熟悉,所以我会进行调查,看看它是否能提供任何见解。
  • @JYelton 只需谷歌 JetBrains dotPeek。 JetBrains 是一家享有盛誉的公司,拥有一系列重要的 .net 工具,例如 resharper。下载、安装并使用该程序打开 DLL。或者你可以使用NDepend 之类的东西。当然,有很多工具可以做到这一点。但 dotPeek 也是一个反射器。你可以看到里面的代码。除非你拥有的 DLL 被混淆了。那么 dotPeek 帮助不大。但我不知道依赖查看器是否可以看到混淆的 DLL 中的引用
猜你喜欢
  • 2015-08-17
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
相关资源
最近更新 更多