【问题标题】:Accessing content file in c# web application在 C# Web 应用程序中访问内容文件
【发布时间】:2011-12-12 21:01:34
【问题描述】:

这个问题我已经想了 3 天了。
我有一个标记为ContentAlways Copy 的xml 文件。
文件已复制到:
C:\Users\avi\Documents\Visual Studio 2010\Projects\ExpressBroker\ExpressBroker\bin\XMLMetadata\Actions.1.xml

访问文件时:

//like that:
XDocument actions = XDocument.Load("bin\\XMLMetadata\\Actions.1.xml");
//or like that:
XDocument actions = XDocument.Load("XMLMetadata\\Actions.1.xml");
//or like that:
XDocument actions = XDocument.Load("Actions.1.xml");

我得到以下异常: Exception Details: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Program Files\IIS Express\bin\XMLMetadata\Actions.1.xml'.

为什么会在 IIS 文件夹中搜索?我如何访问该文件?

我正在使用带有 VWD2010 的 IIs Express

【问题讨论】:

  • 拜托哦,请不要使用像下面这样的语法,不需要它。使用〜100%更不用说你为什么要在bin中签入静态资源?

标签: c# iis linq-to-xml virtual-directory xml


【解决方案1】:

您需要使用 Web 应用程序的相对路径

Server.MapPath("/")+"bin\\XMLMetadata\\Actions.1.xml" 

这样。

【讨论】:

  • 服务器的命名空间是什么?我没有它。谢谢
  • @SexyMF - 为什么需要“服务器命名空间”?
  • 它应该可以在您的 Web 应用程序的任何页面上使用。如果您在页面之外,则从 System.Web.HttpContext.Current.Server 获取它,假设您在 Web 应用程序上运行此代码,因此 httpcontext 的“当前”不会为空。
  • 你为什么不只使用这里要使用的东西,那就是'~'字符。
  • 你也是。同样在加载到 XDocument 之前,最好通过 if(System.IO.File.Exists()){ } 检查文件是否存在
【解决方案2】:

使用

XDocument.Load(Server.MapPath("~/XmlMetaData/Actions.1.xml"));

【讨论】:

    【解决方案3】:

    如果文件是静态的,最好嵌入它并使用 Assembly.GetExecutingAssembly().GetManifestResourceStream()。

    【讨论】:

    • Web 应用程序项目中资源之外的本地内容文件实际上总是更高效、更易于使用,并且可以部署为内​​容类型,更不用说您还可以在它们上获得 iis httpsys 缓存用于外部访问的静态内容文件。
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多