&引用;找不到路径的一部分“;在生产环境中部署c#IIS
我正在从我的应用程序加载xml文件:&引用;找不到路径的一部分“;在生产环境中部署c#IIS,c#,iis,file-io,iis-7.5,C#,Iis,File Io,Iis 7.5,我正在从我的应用程序加载xml文件: XDocument.Load(HttpContext.Current.Server.MapPath("/") + "XMLMetadata\\Actions.1.xml"); 在开发环境中,它运行良好 但部署应用程序后,系统无法找到它。 这就是错误: 异常详细信息:System.IO.DirectoryNotFoundException:找不到路径“C:\inetpub\wwwroot\XMLMetadata\Actions.1.xml”的一部分。 该文
XDocument.Load(HttpContext.Current.Server.MapPath("/") + "XMLMetadata\\Actions.1.xml");
在开发环境中,它运行良好
但部署应用程序后,系统无法找到它。这就是错误:
异常详细信息:System.IO.DirectoryNotFoundException:找不到路径“C:\inetpub\wwwroot\XMLMetadata\Actions.1.xml”的一部分。
该文件已部署到C:\inetpub\wwwroot\MyApp\XMLMetadata\Actions.1.xml
而不是:
C:\inetpub\wwwroot\XMLMetadata\Actions.1.xml
ASP.NET4MVC应用程序
我遗漏了什么?很难说您在这里使用的确切框架和基类,但我猜是ASP.NET。如果是这样,您可能想看看
Control.ResolveUrl()
然后,您应该得到如下内容,而不是Load()
调用
XDocument.Load(this.ResolveUrl("~/XMLMetadata\\Actions.1.xml"));
我过去也用过类似的方法:
var appPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath;
if (appPath.Substring(appPath.Length - 1, 1) != "/") appPath = appPath + "/";
var filePath = appPath + "XMLMetaData//Actions.1.xml";
嗯-你是想问为什么它部署到
C:\inetpub\wwwroot\MyApp\XMLMetadata\
而不是C:\inetpub\wwwroot\XMLMetadata\
事实上,您已经回答了出现错误的原因
正是出于这个原因,您尝试使用参考URL,即~\XMLMetadata\
,而不是硬编码的位置
另外,请确保您在本地使用IIS在开发系统上进行测试。我很确定您希望在本例中使用“~”。与Server.MapPath一起使用的“~”将为您提供应用程序根目录的物理路径。其中“/”将为您提供域名根目录的物理路径。这些路径可以根据IIS设置的方式而有所不同
XDocument.Load(HttpContext.Current.Server.MapPath("~") + "XMLMetadata\\Actions.1.xml");
这是因为您的web应用程序位于虚拟目录中,因此您需要解析到该级别:
var applicationRoot =
HttpContext.Current.Server.MapPath(
HttpRequest.ApplicationPath);
关于:
使用此属性构造相对于应用程序根的URL
来自不在根目录中的页面或Web用户控件。
这允许在不同级别上存在页面和共享控件
使用相同的代码链接到
应用程序中的固定位置
虽然当我重新阅读你的文章时,这可能不会有用。这不会起作用,它仍然会解析为根目录的物理路径,而不是“MyApp”的虚拟目录。我认为只要他的网站在IIS中标记为应用程序,这仍然是正确的。我假设这就是正在发生的事情,因为这似乎是他的代码运行的地方,开发和生产的路径不同。
XDocument.Load(HttpContext.Current.Server.MapPath("XMLMetadata/Actions.1.xml"));