c# - 如何在 XDocument.Load 中使用相对路径?

标签 c# asp.net linq

我的 App_Data 文件夹中有一个名为 PageData.xml 的 XML 文件。我想使用 XDocument.Load 使用此文件填充 XDocument。

如果我提供完整的物理路径,它就可以工作,即:

XDocument vXDoc = XDocument.Load("/Work/Project/Web/100413 Dev/App_Data/PageData.xml");

...其中“Work”是我的 C: 驱动器上的一个文件夹。

但是,如果我尝试这样的相对路径,我会得到一个 DirectoryNotFoundException:

XDocument vXDoc = XDocument.Load("AppData/PageData.xml");

“找不到路径‘C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\AppData\PageData.xml’的一部分。”

这显然是错误的,但是必须有一种简单的方法来设置正确的相对路径吗?我忽略了什么?感谢您的帮助。

最佳答案

有几种方法可以做到这一点。您可以使用 Server.MapPath()将虚拟目录转换为物理目录路径:

XDocument xdoc = XDocument.Load(Server.MapPath("/App_Data/PageData.xml"));

或者您可以使用 Request.PhysicalApplicationPath同样,像这样:

var path = Path.Combine(Request.PhysicalApplicationPath, "App_Data\\PageData.xml");
XDocument xdoc = XDocument.Load(path);

无论哪种情况,问题在于工作进程的当前工作目录通常设置为应用程序目录(这是因为工作目录是进程范围的属性,并且是单个进程可以托管多个网站)。 More information is here .

关于c# - 如何在 XDocument.Load 中使用相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784495/

相关文章:

c# - 如何在 .NET Core 中将 JSON 序列化为没有转义字符的字符串?

c# - F# 与 C# 性能签名以及示例代码

asp.net - 我可以在 Orchard CMS 中使用我的 Ninject .NET 项目吗?

c# - NHibernate Query<T>、Get<T> 和 Load<T> 的区别

c# - MySQL 的 Linq To Entities DayOfYear 替代方案

c# - 控制台应用程序使用哪种生活方式?

c# - 如何以编程方式调用css的 "click"

javascript - 在 ASP.Net 应用程序中将 C# 内联变量传递给 Javascript 函数

c# - 使用 ASP.NET 发送电子邮件

c# - linq表达式可以不区分大小写吗