获取ASP.NET和XDocument.Load中的文件路径

时间:2010-09-14 18:59:30

标签: c# .net xml

我的解决方案中根目录下的文件夹中有一个静态类。在那个静态类'文件夹中,有一个包含XML文件的子文件夹。所以我有这些文件:

/PartialViews/Header/MyStaticClass.cs
/PartialViews/Header/Config/en-US.xml
/PartialViews/Header/Config/jp-JP.xml
...

我在使用XDocument.Load()这些XML文件时遇到问题。具体来说,我正在尝试从MyStaticClass的静态构造函数加载XML文件。

但是,

XDocument.Load()无法找到这些文件。我已经尝试过所有这些但没有工作:

static MyStaticClass()
{
    XDocument doc;

    // These all throw exceptions relating to directory not found
    doc = XDocument.Load("/Config/en-US.xml");
    doc = XDocument.Load(@"\Config\en-US.xml");
    doc = XDocument.Load("/PartialViews/Header/Config/en-US.xml");
    doc = XDocument.Load(@"\PartialViews\Header\Config\en-US.xml");
}

我也尝试在相对路径之前使用Assembly.GetExecutingAssembly().LocationAssembly.GetEntryAssembly().Location,但Assembly解析的程序集始终是.NET库(因为正在初始化类型?)。< / p>

如何在不更改解决方案位置的情况下加载文件?

2 个答案:

答案 0 :(得分:6)

在ASP.NET中,您应该使用Server.MapPath()来查找所有本地文件。

string relPath = "~/PartialViews/Header/Config/en-US.xml";
string absPath = Server.MapPath(relPath);

XDocument doc = XDocument.Load(absPath);

答案 1 :(得分:1)

对于.NET Web应用程序使用 HttpContext.Current.Server.MapPath("~/");这将获得执行文件的根目录。