が記載されていないのはなぜ.純のOpenSSL.NET dll?
-
22-09-2019 - |
質問
編集 (全体の問題でも不明確であ
利用したい OpenSSL.NET
のOpenSSL.NET イスが表示さ: 設置
を確認してくださいlibeay32.dll やssleay32.dll 現在の作業 ディレクトリのお申し込みはおます。 を行い
でおります。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();
}
}
}
を取得します以下のようなエラー:できない負荷DLL'libeay32'http://localhostr.com/files/a719c5/Error.gif な負荷DLL'libeay32')
ここでは、モニタログ依頼に:altテキストhttp://localhostr.com/files/726a46/ProcMon.gif
なぜですか?なぜなDLLす。
解決
の最新バージョンのOpenSSL.NET (0.4.1 るべきであるとすprebuilt libeay32.dll やssleay32.dll バイナリにリンクするのCRTを静的.択することで作ることができるこれらの図書館は自分で使用する"公用"の構築からopenssl.org.
他のヒント
見ずにコードが一致しているエラーの場合:
- ないdllをパスの実行可能な場sln在であります。エグゼは、通常はbin/デバッグまたはbin/x86/デバッグなど).
- なの適正な署名を呼び出し関数(すなわち、私たちには整数型のパラメータは、戻り値の型と一致しません。
- ないので、整列化の種類を適切に(すなわち、BOOLは整列化しbool型がboolで整列化として符号なしシングルバイトの整数、等)がこの最後あたりの原因となる例外で締め付けて感触をつかむこと味のファンキーの行動です。
- am on64ビットプ、呼び出し32ビットのdll.のポインタサイズがすべて異なるのdllにまとともにクラッシュを起こする例外です。
編集:すべての他、 ウォーカー依存性, で、音のようにおdllを呼び出しのdllいないパスまたはディレクトリの実行形式にまとめたものです。
は、まだこの問題が発生して(と必要な前提条件が正しい場所に存在することを確認します:
の OpenSSL.NETインストールマニュアルをチェックし、その前提条件がインストールされていることを確認します。の私の場合、ユーザーはのMicrosoft Visual C ++がありませんでしたOpenSSL.NETドキュメント内で呼び出された2010再頒布可能パッケージ(x86)に依存ます。
あなたの問題は、この質問に関連しています
でありますすべてdepencenciesは、アプリケーションの同じフォルダ内にあるかregistredされているかどうかを確認します。
プロービングを使用してみてください。あなたは、アプリケーションの実行ファイルの完全な名前として名前(またはあなたの非マネージDLLをrequieresアセンブリとして命名)の.config拡張子を持つXML設定ファイルを作成する必要があります。例えば。アプリケーションが名前の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のために働くが、試してみる価値はあるだろうされていない場合ます。
これを行うNETの方法はグローバルであなたのアセンブリをインストールすることですアセンブリキャッシュするます。
各コンピュータ一般的には インストールされている言語ランタイムが持っています 呼ばれるマシン全体のコードキャッシュ グローバルアセンブリキャッシュ。グローバル アセンブリキャッシュに格納アセンブリ 具体的に共有されるように指定 上の複数のアプリケーションで コンピューターます。
何もないが動作する場合、最後の手段として:
アプリケーション(.NETまたはないが)のDLLを探している場所を知っておくと便利かもしれません。ただ、DLLのファイル名をプロセスモニタのとフィルタを使用しています。次に、アプリケーションがそれを探している場所にコピーします。
あのVC++redistributables.思想OpenSSL.NET はx86だけです グラブは、VS2008版x86再頒布可能 だリリース構造を作成する環境が整いました
そうではない場合、彼らはdebugビルドだMicrosoft.VC90.DebugCRTにEventViewerのsxstraceログ)をする必要がありますのいずれかの
- の再構築としてリリース
- インストール又はコピーにはデバッグredistributablesから別の機
- イVisual C++にVisual Studioには、おそらく、サンプルシミュレーションエクスプレス)
私は解決策を見つけます。
残念ながらVS2008 C ++再頒布可能パッケージは、動作しませんでした - 私はSP1版とVC ++ 2008をインストールする必要がありました。著者はそれが私の側の間違いだった、とではないことを同社のウェブサイト上のコメントで述べています。彼は現在、静的にリンクするDLLを再コンパイルされます。お世話になった人たちのすべてにありがとう:)
ではなく「どのCPU」のx86のにプロジェクトのプラットフォームターゲットを変更してみてください。
、我々は2008年のプラットフォームに勝つのx64上のオープンSSLを使用してWebサイトを開発する際に、我々はアプリケーションプールを確認する必要があります:真
:32個のアプリケーションが可能
あなたのアプリケーションのパス、その後入れlibeay32.dll、x86のフォルダにssleay32.dllを中に新規フォルダの名前付きのx86を作成します。