我有一个包含少数项目的Visual Studio 2008解决方案。一个项目包含WCF Service我正在部署。该WCF服务引用了其他项目中的一些代码。该代码试图读取WCF项目中的文件夹中的文件。伪项目结构:
Solution
Project1
myclass.cs
string file = Server.Mappath("");
Project2
filefolder
myfile.txt
放入Mappath的正确语法是什么?我尝试了所有不同的变体,例如:
".filefolder/myfile.txt"
"/filefolder/myfile.txt"
"./filefolder/myfile.txt"
"~/filefolder/myfile.txt"
似乎没有人能够访问该文件。我想到的一件事是:Visual Studio 2008在IIS的自己的沙箱中运行项目和WCF。这可能是问题吗?如果在常规IIS中进行设置和部署,它会起作用吗?
答案 0 :(得分:31)
var serverPath =
System.Web.Hosting.HostingEnvironment.MapPath("~/filefolder/myfile.txt");
答案 1 :(得分:2)
您是否尝试过使用HostingEnvironment.ApplicationPhysicalPath?
var fileInfo = new FileInfo(
Path.Combine( new DirectoryInfo( HostingEnvironment.ApplicationPhysicalPath ).Parent.Name , @"filefolder/myfile.txt" ) );
答案 2 :(得分:2)
Server.MapPath(Path.Combine( new DirectoryInfo( HostingEnvironment.ApplicationPhysicalPath ).Parent.Name , "Filename.txt" ));
似乎适合我。我确实需要包括
using System.Web.Hosting;
答案 3 :(得分:0)
最好的办法是不要这样做。
为什么要将一个项目的部署位置绑定到另一个项目的部署位置?如果需要WCF服务来读取文件,请将文件复制到WCF服务。
答案 4 :(得分:0)
来自MSDN;由于以下示例中的路径参数不以斜杠字符开头,因此它们相对于包含示例文件的目录进行映射。
尝试:
Server.Mappath("filefolder/somefile.file");
答案 5 :(得分:-1)
问题是,在调用WCF时,文件系统一直运行到bin / Debug文件夹。所以尝试从那里MapMath不起作用。回溯路径:
filedata = File.ReadAllBytes("../../filefolder/myfile.txt");
那很有用。感谢所有帮助人员!