c# - TypeInitializationException 使用 OpenSsl.net

标签 c# c++ openssl

我正在尝试使用 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/

相关文章:

c# - 将查询字符串作为路由值字典添加到 ActionLink

c# - ClickOnce 发布期间出错

java - 将 Java 加密算法移植到 C++ OpenSSL

c# - 如何在 MonoTouch 中将 bool 转换为 NSObject

c++ - 在 std::map 中使用 'auto'

c++ - 我可以在 C++ 中将变量保留在 struct undefined 中吗?

c++ - 获得两个 vector 之间最大差异的最快方法

node.js - 如何使用 Node.js 上的 https 模块连接客户端证书

openssl - 在 Zenmap 7.93 上运行的 NMAP NSOCK 错误 ssl_init_helper OpenSSL 遗留提供程序加载失败

c# - 按多列返回 linq 组的类型