C# 文件。已发布网站中的文件存在失败

C# 文件。已发布网站中的文件存在失败,c#,model-view-controller,permissions,msdeploy,C#,Model View Controller,Permissions,Msdeploy,安装:MVC Web Api应用程序,Visual Studio 2012 文件夹布局: D:\WebSites\MySite\bin\MyDLLBin\Some.dll 我的应用程序需要在非托管DLL上加载库,作为MVC Web API应用程序的一部分。在执行LoadLibrary之前,我执行以下操作: File.Exists(@"D:\WebSites\MySite\bin\MyDLLBin\Some.dll") 这将返回false,这意味着我不应该执行LoadLibrary 我尝试在此处

安装:MVC Web Api应用程序,Visual Studio 2012

文件夹布局: D:\WebSites\MySite\bin\MyDLLBin\Some.dll

我的应用程序需要在非托管DLL上加载库,作为MVC Web API应用程序的一部分。在执行LoadLibrary之前,我执行以下操作:

File.Exists(@"D:\WebSites\MySite\bin\MyDLLBin\Some.dll")
这将返回false,这意味着我不应该执行LoadLibrary

我尝试在此处复制DLL: C:\MyDLLs\Some.Dll

返回TRUE。所以我从那里做了一个LoadLibrary,一切都很好

我通过登录服务器并创建“C:\MyDLLs”文件夹来创建它。“D:\WebSites\MySite\bin\MyDLLBin”文件夹是通过从Visual Studio发布创建的

我想可能是某种权限问题,但我已登录到服务器,并将路径“D:\WebSites\MySite\bin\MyDLLBin”和文件中的每个文件夹的“Everyone”设置为“完全访问”。Exists仍然失败

我最好将一些.dll作为发布到bin文件夹的一部分进行部署,而不必在服务器上创建一个特殊的文件夹来保存dll

有人能提出一个解决方案或其他一些东西来尝试吗

更新#1: 有趣的是:

System.IO.FileInfo(@"D:\WebSites\MySite\bin\MyDLLBin\Some.dll").Length

不引发异常并返回7132045。

假设
filePathInApp
是从运行应用程序的根(而不是文件系统的根)保存文件路径的字符串,
Server.MapPath(filePathInApp)
将在应用程序运行的任何位置将目录路径更改为“根目录”。因此,您可能希望尝试
Server.MapPath(“some.dll”)
Server.MapPath(“\MyDLLBin\some.dll”)

尝试打开该文件-本例中的异常通常提供更多信息。在调用之前还要检查Environment.UserName(以了解用户的实际身份),并使用命令行中的“cacls”验证用户的实际权限。谢谢。文件。打开建议有帮助。为了动态构建DLL的路径,我使用Assembly.GetExecutionGassembly和AssemblyName.CodeBase。这些调用似乎在返回的文件名前面放了一个“file://”。我认为这是导致File.Exists始终返回FALSE的原因。当我尝试File.Open并且文件名前面有“File://”时,File.Open返回“URI格式不受支持”。Win32 LoadLibrary将返回错误\u MOD\u not\u FOUND(126),因此我猜它也不支持URI格式。去掉URI部分使一切都能正常工作。代码已经按照您的建议执行了,我只是省略了它,以使问题陈述更清楚。谢谢
System.IO.FileInfo(@"D:\WebSites\MySite\bin\MyDLLBin\Some.dll").Length