编辑(整个问题,太不清楚了)
我想使用OpenSSL.NET
OpenSSL.NET安装说明页面:INSTALL
确保当前有效的libeay32.dll和ssleay32.dll 应用程序的目录或PATH中的目录。的完成
在.NET项目中,添加对ManagedOpenSsl.dll程序集的引用。的完成
我已将 libeay32.dll
和 ssleay32.dll
加入 bin/Debug
和 bin/Release
目录。我还将它们放在 system32
。
这是我的完整代码:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
OpenSSL.Crypto.RSA rsa = new OpenSSL.Crypto.RSA();
}
catch (Exception e)
{
Console.WriteLine(e.InnerException.Message);
}
Console.Read();
}
}
}
我收到以下错误: Unable to load DLL 'libeay32' http://localhostr.com/files/a719c5/Error.gif (无法加载DLL'libeay32')
这是Process Monitor日志(根据要求): alt text http://localhostr.com/files/726a46/ProcMon.gif
我做错了什么?为什么找不到DLL?
答案 0 :(得分:5)
尝试使用最新版本的OpenSSL.NET(0.4.1),该版本现在应该包含预先构建的libeay32.dll和ssleay32.dll二进制文件,它们会静态链接到CRT。或者,您可以自己构建这些库,也可以使用openssl.org中的“官方”构建。
答案 1 :(得分:2)
如果没有准确查看您的代码,我会在以下时收到该错误:
编辑:当其他所有方法都失败时,请尝试dependency walker,因为听起来你的dll正在调用其他不在你的路径或可执行文件目录中的dll。
答案 2 :(得分:2)
对于其他任何人仍然遇到此问题(并且已经确认必要的先决条件存在于他们的正确位置:
检查OpenSSL.NET installation documentation并确保已安装其先决条件。在我的情况下,用户错过了在OpenSSL.NET文档中调用的Microsoft Visual C++ 2010 Redistributable Package (x86)依赖项。
答案 3 :(得分:1)
答案 4 :(得分:1)
尝试使用探测。您需要创建一个XML配置文件,该文件名为应用程序的可执行完整名称(或命名为需要非托管dll的程序集),扩展名为.config。例如。如果您的应用程序是名称myapp.exe,则配置文件将命名为myapp.exe.config 配置文件必须与可执行文件/程序集位于同一目录中。
配置文件是一个简单的xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyuBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="PATH" />
</assemblyuBinding>
</runtime>
</configuration>
现在,应用程序将在加载程序集时搜索PATH。 PATH是相对于配置/程序集文件。
不确定它是否适用于非托管dll,但值得一试。
答案 5 :(得分:0)
.NET的方法是在global assembly cache。
中安装程序集每台电脑常见的地方 语言运行库安装有一个 机器范围的代码缓存称为 全局程序集缓存。全球 程序集缓存存储程序集 专门指定分享 通过几个应用程序 计算机。
答案 6 :(得分:0)
作为最后的手段,如果没有别的办法:
知道应用程序(.net与否)正在寻找DLL的位置可能很有用。只需使用Process Monitor并过滤DLL的文件名即可。然后将其复制到应用程序正在查找的位置。
答案 7 :(得分:0)
您可能错过了VC ++可再发行组件。我假设OpenSSL.NET只是x86,所以如果它们是发布版本,你可以grab the VS2008 version x86 redistributable。
否则,如果它们是调试版本(您将在EventViewer或sxstrace日志中看到Microsoft.VC90.DebugCRT),那么您将需要:
答案 8 :(得分:0)
我找到了解决方案。
不幸的是,VS2008 C ++ Redistributable软件包无法运行 - 我必须安装SP1版本和VC ++ 2008。作者在其网站上发表评论说,这是一个错误,而不是我的错误。他目前正在重新编译要静态链接的DLL。感谢所有帮助过我的人:)
答案 9 :(得分:0)
尝试将项目的平台目标更改为x86而不是“any cpu”。
答案 10 :(得分:0)
就我而言,当我们在x64 win 2008平台上开发一个开放ssl的网站时,我们必须检查应用程序池:允许32个应用程序:true
答案 11 :(得分:0)
在应用程序路径中创建名为x86的新文件夹,然后将libeay32.dll,ssleay32.dll放入x86文件夹中。