-->

Libsodium-net - Unable to load DLL 'libsodium.

2019-04-07 02:03发布

问题:

I installed Libsodium-net through NuGet and am able to include Sodium in my classes, but when I try to run it, I get

An exception of type 'System.DllNotFoundException' occurred in Sodium.dll but was not handled in user code

Additional information: Unable to load DLL 'libsodium.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

I am just trying to run the sample code from the gitbooks documentation 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);

回答1:

I had the same problem and solved it using Jørn Wildt's answer given here.

It turns out that ASP.NET doesn't make shadow copies of unmanaged DLLs such as libsodium.dll and libsodium-64.dll.

Sodium.dll (the managed code) tries to load the DLLs from either the same directory as the shadow copy of Sodium.dll (which is not going to work) - or some where in the PATH environment variable's directories.

My solution was to add the AppDomain \Bin directory to the path before calling any Sodium code:

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

As Reuben commented on the answer; I added the above code in my Application_Start method of my Global.asax.



回答2:

I got this one as well. First part of the solution was to do as @NiklasEkman did, adding directory to PATH variable.

But, I got the exact same error when deployed to our QA environment. After spending hours messing with permissions, trying to figure out if the dlls are in the right directory, and similar I ran into this post: https://mspcontrol.org/forums/topic/add-user-error-unable-to-load-dll-libsodium-64-dll/#post-4765

You have to install Visual C++ Redistributable for Visual Studio 2015 (13 Mb) https://www.microsoft.com/en-us/download/details.aspx?id=48145

In the end that solved the issue for me.