10

ASP.NET (.asmx を使用) ファイルでビルドされた古い Web サービスがあります。私はsodium.netを使用する必要があります-残念ながら、依存するlibsodium.dllファイルのロード中に失敗します。私が間違っていることについてのアイデアはありますか?

  • NuGet を使用して libsodium.net を追加しました。

  • 64 ビット DLL の名前を「libsodium.dll」に変更しました (およびその他の命名規則も)。

  • libsodium.dll を直接参照しようとしましたが、VS はそれを拒否しました (有効な DLL ではありません)。そのため、「出力にコピー」ではなく「コンテンツ」として追加しました。

  • ビルド後、Web サイト/Bin フォルダーにsodium.dll (.NET アセンブリ) と libsodium.net の両方が含まれていることがわかります。

  • libsodium.net を使用しようとすると、次のようになります。

    ERROR 2015-02-02 11:14:27,118 13798ms [41] CabinetService doRequest - キャッチ: 'Sodium.SodiumCore' の型初期化子が例外をスローしました。System.TypeInitializationException: 'Sodium.SodiumCore' の型初期化子が例外をスローしました。---> System.DllNotFoundException: DLL 'libsodium.dll' を読み込めません: 指定されたモジュールが見つかりませんでした。(HRESULT からの例外: 0x8007007E) DynamicDllInvokeType.sodium_init() at Sodium.SodiumCore..cctor() --- 内部例外スタック トレースの終わり --- Sodium.SodiumCore.LibraryName() at Sodium.SecretBox.Create(Byte [] メッセージ、Byte[] nonce、Byte[] キー) の Macaroons.SecretBoxCryptoAlgorithm.Encrypt(Byte[] キー、Byte[] plainText) は c:\Projects\Macaroons.Net\Macaroons.Net\SecretBoxCryptoAlgorithm.cs:line にあります。 58

そのため、Bin フォルダーにあるにもかかわらず、「libsodium.dll」が見つかりません。また、「sodium.net」への依存関係を削除しようとしましたが、「sodium.net」が見つからないという実行時エラーが発生した後、再度追加すると、そのエラーは消え、代わりに上記のものを取得しました( 「sodium.net」は正しくロードされます)。

そこで、「C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\cabinetservice」にある Web サイトのシャドウ フォルダーを開き、「sodium」を検索します。唯一の結果は、一部のサブフォルダーにある「sodium.dll」です。「libsodium.dll」はありません。

したがって、ASP.NET は、Web サイトのシャドウ コピーを作成するときに "libsodium.dll" ファイルを無視するようです。

また、libsodium.dll (32 ビット) を C:\Windows\System32 に、libsodium.dll (64 ビット) を C:\Windows\SysWOW64 に追加しようとしました。同じ結果です。

そして、C:\Windows\Microsoft.NET\assembly\GAC_32\libsodium と C:\Windows\Microsoft.NET\assembly\GAC_64\libsodium を試しました。同じ結果です。

ASP.NET に依存関係を認識させるにはどうすればよいですか?

4

2 に答える 2