我有一个基于ASP.NET(使用.asmx)文件的旧web服务构建.我需要使用sodium.net - 不幸的是它在加载依赖的libsodium.dll文件时失败了.关于我犯错的任何想法?
我通过NuGet添加了libsodium.net.
我已将64位DLL重命名为"libsodium.dll"(以及其他命名约定).
我试图直接引用libsodium.dll,但VS拒绝它(不是有效的DLL).所以我把它添加为"内容"而不是"复制到输出".
构建后我可以看到网站/ Bin文件夹包含sodium.dll(.NET程序集)和libsodium.net.
当我尝试使用libsodium.net时,我得到:
ERROR 2015-02-02 11:14:27,118 13798ms [41] CabinetService doRequest - Caught:'Sodium.SodiumCore'的类型初始化程序引发异常.System.TypeInitializationException:'Sodium.SodiumCore'的类型初始值设定项引发了异常.---> System.DllNotFoundException:无法加载DLL'libsodium.dll':找不到指定的模块.(来自HRESULT的异常:0x8007007E)位于Sodium.SodiumCore..cctor()的DynamicDllInvokeType.sodium_init()---内部异常堆栈跟踪结束---位于Sodium.SSecretBox.Create(Byte)的Sodium.SodiumCore.LibraryName() []消息,Byte [] nonce,Byte []键)在Macaroons.SecretBoxCryptoAlgorithm.Encrypt(Byte []键,Byte [] plainText)中的c:\ Projects\Macaroons.Net\Macaroons.Net\SecretBoxCryptoAlgorithm.cs:line 58
所以它找不到"libsodium.dll",即使它在Bin文件夹中.我也尝试删除对"sodium.net"的依赖,在我收到运行时错误后说"sodium.net"丢失了 - 当我重新添加它时,该错误消失了,我得到了上面的那个(表示"sodium.net"正确加载).
所以我在"C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\cabinetservice"中打开网站shadow文件夹并搜索"sodium".唯一的结果是某些子文件夹中的"sodium.dll".没有"libsodium.dll".
显然,ASP.NET在创建网站的卷影副本时会忽略"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了解依赖?