Libsodium-net - 无法加载DLL'libsodium.dll

Que*_*ion 7 .net c# dll libsodium asp.net-web-api2

我通过NuGet安装了Libsodium-net并且能够在我的课程中包含Sodium,但是当我尝试运行它时,我得到了

Sodium.dll中出现"System.DllNotFoundException"类型的异常,但未在用户代码中处理

其他信息:无法加载DLL'libsodium.dll':找不到指定的模块.(来自HRESULT的异常:0x8007007E)

我只是想从gitbooks文档中运行示例代码 https://bitbeans.gitbooks.io/libsodium-net/content/password_hashing/index.html

const string PASSWORD = "Correct Horse Battery Staple";
const string SALT = "qa~t](84z<1t<1oz:ik.@IRNyhG=8q(o";
const long OUTPUT_LENGTH = 512;

//this will produce a 512 byte hash
var hash = PasswordHash.ScryptHashBinary(PASSWORD, SALT,      PasswordHash.Strength.Medium, OUTPUT_LENGTH);
Run Code Online (Sandbox Code Playgroud)

Nik*_*man 10

我遇到了同样的问题,并使用JørnWildt给出的答案解决了这个问题.

事实证明,ASP.NET不会制作非托管DLL的影子副本,例如libsodium.dll和libsodium-64.dll.

Sodium.dll(托管代码)尝试从与Sodium.dll的阴影副本(不起作用)相同的目录加载DLL - 或者在PATH环境变量的目录中加载某些DLL.

我的解决方案是在调用任何Sodium代码之前将AppDomain\Bin目录添加到路径:

string path = Environment.GetEnvironmentVariable("PATH");
string binDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Bin");
Environment.SetEnvironmentVariable("PATH", path + ";" + binDir);
Run Code Online (Sandbox Code Playgroud)

正如鲁本评论答案; 我在我的Application_Start方法中添加了上面的代码Global.asax.


Igo*_*gor 8

我也得到了这个.解决方案的第一部分是像@NiklasEkman那样做的,将目录添加到PATH变量.

但是,在部署到我们的QA环境时,我得到了完全相同的错误.花了几个小时搞乱权限,试图弄清楚dll是否在正确的目录中,类似的我遇到了这篇文章:https: //mspcontrol.org/forums/topic/add-user-error-unable-to-负载-DLL-libsodium-64-DLL /#后4765

您必须为Visual Studio 2015安装Visual C++ Redistributable(13 Mb) https://www.microsoft.com/en-us/download/details.aspx?id=48145

最终为我解决了这个问题.