“找不到路径的一部分”;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# IIS在生产环境中的部署

嗯-你是想问为什么它被部署到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"));