C# libnet-无法加载DLL';lib.dll

C# libnet-无法加载DLL';lib.dll,c#,.net,dll,asp.net-web-api2,libsodium,C#,.net,Dll,Asp.net Web Api2,Libsodium,我通过NuGet安装了LibNasdinal net,并且能够在我的类中包含Nasdinal,但是当我尝试运行它时,我得到了 Na钠.dll中发生“System.DllNotFoundException”类型的异常,但未在用户代码中处理 其他信息:无法加载DLL“libnaid.DLL”:找不到指定的模块。(来自HRESULT的异常:0x8007007E) 我只是尝试运行gitbooks文档中的示例代码 const string PASSWORD=“正确的马电池钉”; const string

我通过NuGet安装了LibNasdinal net,并且能够在我的类中包含Nasdinal,但是当我尝试运行它时,我得到了

Na钠.dll中发生“System.DllNotFoundException”类型的异常,但未在用户代码中处理

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

我只是尝试运行gitbooks文档中的示例代码

const string PASSWORD=“正确的马电池钉”;

const string SALT=“qa~t](84z我遇到了同样的问题,并使用解决方案解决了它

事实证明,ASP.NET不会生成非托管dll(如libnaude.dll和libnaude-64.dll)的卷影副本

Na钠.dll(托管代码)尝试从Na钠.dll的卷影副本所在的目录(不起作用)或PATH环境变量目录中的某个位置加载dll

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

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

正如Reuben对答案的评论一样,我在我的
Global.asax

Application\u Start
方法中添加了上述代码。解决方案的第一部分是像@NiklasEkman那样,将目录添加到PATH变量中

但是,我在部署到QA环境时遇到了完全相同的错误。在花了数小时处理权限后,我试图弄清楚DLL是否位于正确的目录中,类似的,我遇到了以下帖子:


您必须安装VisualC++的可分配的VisualStudio 2015(13 MB)


最后解决了这个问题。< / P>我遇到了几个问题:…1)你必须安装VisualC++的同一个目标作为你的进程,或者X64或x86。注意,如果你在ASP.NET应用程序池中运行“x86”,就需要x86。“选项已打开…”。。。。2)在安装可再发行版本后,您需要重新启动IIS(或者可能只是您的应用程序池)。此外,由于此库可能需要安装单独的依赖项(即,不是正常的XCOPY部署),我认为公平地说,将libnaid.dll和libnaid-64.dll复制到C:\Windows\System32或C:\Windows\SysWOW64目录可能更为实际,而不是弄乱PATH环境变量。这将取决于您的特定部署要求,但对我来说,这是最好的选择。VisualC++可重新分配VisualStudio 2017取代了2015版本。我想一切都包括在内,但这个解决方案不适合我。

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