10

我通过 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);
4

2 回答 2

13

我遇到了同样的问题,并使用Jørn Wildt 在此处给出的答案解决了它。

事实证明,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);

正如鲁本对答案所评论的那样;我在我Application_StartGlobal.asax.

于 2016-05-30T13:22:41.467 回答
12

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

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

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

最后为我解决了这个问题。

于 2017-07-13T10:39:53.940 回答