2010-09-14 11 views
5

Ich habe eine statische Klasse in einem Ordner aus Root in meiner Lösung. In diesem Ordner der statischen Klasse befindet sich ein Unterordner mit XML-Dateien. Also habe ich diese Dateien bekommt:Abrufen des Dateipfads in ASP.NET und XDocument.Load

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

Ich habe Probleme mit den XML-Dateien mit XDocument.Load(). Insbesondere versuche ich, die XML-Dateien aus dem statischen Konstruktor MyStaticClass zu laden.

XDocument.Load() kann nicht scheinen, die Dateien jedoch zu finden. Ich habe versucht, all diese und keine Arbeit: (weil der Typ initialisiert wird)

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"); 
} 

Ich habe auch versucht Assembly.GetExecutingAssembly().Location und Assembly.GetEntryAssembly().Location vor dem relativen Pfad, aber die Montage von Assembly aufgelöst ist immer eine .NET-Bibliothek .

Wie kann ich die Datei laden, ohne ihren Speicherort in der Lösung zu ändern?

+0

Bitte hinterlassen Sie Tags wie "C#" in den Tags und halten Sie sie außerhalb des Titels. Kein Grund, an zwei Stellen dieselbe Information zu haben. –

Antwort

6

In ASP.NET sollten Sie Server.MapPath() verwenden, um alle lokalen Dateien zu finden.

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

XDocument doc = XDocument.Load(absPath); 
1

Für .NET Web-Anwendungen verwenden HttpContext.Current.Server.MapPath("~/"); diese werden Ihnen das Root-Verzeichnis der ausführenden Datei.

Verwandte Themen