我对azure WCF项目有疑问。我想获取xml文件的文件路径,我将其添加到项目< add - > 现有项目>。在其属性中,我设置了“复制如果更新”,当我在天蓝色服务器上部署它时,我看到此文件已正确复制到 bin 。 我尝试过使用:
1)这个只能在模拟器上本地工作:
string filePath = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot"), @"approot", @"bin", @"myFile.xml");
2)无法在任何地方工作(在模拟器和天蓝色上):
string appRoot = HttpContext.Current.Server.MapPath(@"~\");
string filePath = Path.Combine(appRoot + @"\", @"bin\myFile.xml");
也许除了将xml文件添加到输出目录之外还有其他方法吗?我正在使用EmguCV并想加载cascade xml文件。
答案 0 :(得分:2)
Azure没什么特别的!它只是IIS!因此无论你在本地工作和工作,无论你在Azure中工作(作为一般经验法则)。
你试过HttpContext.Current.Server.MapPath("~/bin/name_of_file.xml");
吗?
我也想知道你为什么要设置它的Copy Local
属性。将XML添加到解决方案的正确方法是将Build Action
设置为Content
,将Copy to Output
设置为Do not copy
。然后只需Server.MapPath("~/name_of_file.xml")
即可。
答案 1 :(得分:0)
我刚刚经历了这个尝试,试图获得一个Azure功能,该功能在本地运行时可以正常工作,而在部署到Azure时可以正常工作。我的功能是引用位于解决方案中的数据文件,而在部署到Azure时找不到该文件。虽然仅使用文件名在本地运行时就可以找到文件,但必须使用路径“ D:\ home \ site \ wwwroot \”将文件放置在Azure中。我没有使用硬编码的值作为路径,而是使用了:
var binPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
这将获取Azure函数二进制文件的路径,但是我的数据文件位于父文件夹中,因此:
var parentOfBinPath = new DirectoryInfo(binPath).Parent.FullName;
并与文件名结合以获得完整的文件路径:
var filePath = Path.Combine(parentOfBinPath, "my-file.dat");
既适用于本地运行功能,又适用于已部署到Azure的功能。