“找不到路径的一部分”;c# IIS在生产环境中的部署
本文关键字:IIS 生产环境 部署 找不到 路径 一部分 | 更新日期: 2023-09-27 18:12:28
我正在从我的应用程序加载xml文件:
XDocument.Load(HttpContext.Current.Server.MapPath("/") + "XMLMetadata''Actions.1.xml");
在开发环境下运行良好。
但是在我部署应用程序后,系统找不到它。
下面是错误:Exception Details: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:'inetpub'wwwroot'XMLMetadata'Actions.1.xml'.
文件被部署到C:'inetpub'wwwroot'MyApp'XMLMetadata'Actions.1.xml
C:'inetpub'wwwroot'XMLMetadata'Actions.1.xml
asp.net 4 MVC应用我错过了什么?
嗯-你是想问为什么它被部署到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");
很难说您在这里使用的是什么确切的框架和基类,但我猜是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";
这是因为您的web应用程序位于虚拟目录中,因此您需要解析到该级别:
var applicationRoot =
HttpContext.Current.Server.MapPath(
HttpRequest.ApplicationPath);
来自MSDN的ApplicationPath注释:
使用此属性构造一个相对于应用程序根目录的URL从不在根目录中的页面或Web用户控件中获取。这允许存在于不同级别的页面和共享控件,以便使用相同的代码链接到位于的资源应用程序中的固定位置。
XDocument.Load(HttpContext.Current.Server.MapPath("XMLMetadata/Actions.1.xml"));