设置:MVC Web Api应用程序,Visual Studio 2012
文件夹布局: d:\网站已\ mysite的\ BIN \ MyDLLBin \ Some.dll
我的应用程序需要在非托管DLL上将LoadLibrary作为MVC Web API应用程序的一部分。在做LoadLibrary之前,我做了一个:
File.Exists(@"D:\WebSites\MySite\bin\MyDLLBin\Some.dll")
这会返回false,这意味着我不应该使用LoadLibrary。
我尝试在这里复制DLL: C:\ MyDLLs \ Some.Dll
和
File.Exists(@"C:\MyDLLs\Some.DLL")
返回TRUE。所以我从那里做了一个LoadLibrary,一切都很好。
我通过登录服务器并创建它来创建“C:\ MyDLLs”文件夹。 “D:\ WebSites \ MySite \ bin \ MyDLLBin”文件夹是通过Visual Studio中的发布创建的。
我认为可能存在某种权限问题,但我已登录到服务器并在“D:\ WebSites \ MySite \ bin \ MyDLLBin”和文件中的每个文件夹上将“Everyone”设置为“Full Access” .Exists仍然失败。
最好将Some.dll作为发布的一部分部署到bin文件夹,而不必在服务器上创建一个特殊文件夹来保存dll。
有人可以提出修复或其他一些尝试吗?
更新#1: 有趣的是:
System.IO.FileInfo(@"D:\WebSites\MySite\bin\MyDLLBin\Some.dll").Length
不会抛出异常并返回7132045。
答案 0 :(得分:0)
假设filePathInApp
是从运行应用程序的根目录(而不是文件系统的根目录)保存文件路径的字符串,
Server.MapPath(filePathInApp)
会将您的目录路径更改为在运行应用程序的任何位置“root”。因此,您可以尝试Server.MapPath("some.dll")
或Server.MapPath("\MyDLLBin\some.dll")