我正在尝试使用 OpenSsl.net,但我收到了 TypeInitializationException,这让我很困惑。 设置是:
- 我有一个控制台应用程序,它有一个对 openssl.net 的项目引用(事实上,我正在使用这里的分支:https://github.com/marcominetti/openssl-net)
- 我已经在我的机器上编译了 openssl(用于 32 位 Windows)并将 libeay32.dll 和 ssleay32.dll 复制到我的控制台应用程序的 bin/Debug 文件夹中。
- bin/Debug 文件夹还包含 libcrypto.so
- 我的机器是 64 位的(openssl 的 64 位构建失败但这是另一个问题)
- 控制台应用程序设置为 x86 平台目标
但是,在运行时我得到一个 TypeInitializationException 的详细信息:
无法加载 DLL“librypto”:找不到指定的模块。 (HRESULT 异常:0x8007007E)
我做错了什么?
最佳答案
所以我终于想通了。
在仔细查看 fork 中的代码后,它看起来更适合 linux 环境而不是 windows(这是我正在使用的操作系统 - 可能应该提到......)
在 Native.cs 中,它将 DLLNAME 指定为 libcrypto 而不是 libeay32。看来这可能适用于 linux 系统而不是 windows。
托管开放 ssl 的 app.config 确实包含一些 dllmap 部分,这些部分似乎试图将对 libcrypto 的请求重定向到 libeay32.dll 但这似乎不起作用(我不知道这是否仅适用于单声道?)。
我已将 DLLNAME 设置为 libeay32,一切似乎都按预期工作。
关于c# - TypeInitializationException 使用 OpenSsl.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912379/