使用OpenSsl.net的TypeInitializationException

时间:2014-11-13 15:24:19

标签: c# c++ openssl

我正在尝试使用OpenSsl.net,但是我收到了一个让我感到困惑的TypeInitializationException。 设置是:

  • 我有一个控制台应用程序,它有一个对openssl.net的项目引用(事实上我从这里使用fork:https://github.com/marcominetti/openssl-net
  • 我在我的机器上编译了openssl(用于32位窗口)并将libeay32.dll和ssleay32.dll复制到我的控制台应用程序的bin / Debug文件夹中。
  • bin / Debug文件夹还包含libcrypto.so
  • 我的机器是64位(openssl的64位版本失败但这是另一个问题)
  • 控制台应用程序设置为x86的平台目标

但是,在运行时,我得到一个带有详细信息的TypeInitializationException:

无法加载DLL'librypto':找不到指定的模块。 (HRESULT异常:0x8007007E)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

所以我终于明白了。

在仔细查看fork中的代码之后,看起来它似乎是为Linux环境设置的,而不是windows(这是我正在使用的操作系统 - 可能应该提到的......)

在Native.cs中,它将DLLNAME指定为libcrypto而不是libeay32。看起来这可能是针对Linux系统而不是Windows。

托管开放ssl的app.config确实包含一些dllmap部分,这些部分似乎试图将libcrypto的请求重定向到libeay32.dll,但这似乎不起作用(我不知道这是否有用)仅适用于单声道?)。

我已将DLLNAME设置为libeay32,所有内容似乎都按预期工作。