2010-09-14 14 views
5

Ho una classe statica in una cartella fuori dalla radice nella mia soluzione. In quella cartella di classe statica, c'è una sottocartella contenente file XML. Così ho questi file:Ottenere il percorso del file in ASP.NET e XDocument.Load

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

Ho problemi con XDocument.Load() con quei file XML. In particolare, sto cercando di caricare i file XML dal costruttore statico di MyStaticClass.

XDocument.Load() non riesco a trovare i file, tuttavia. Ho provato tutto questo e nessuno di lavoro: (? Perché il tipo è in fase di inizializzazione)

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

Ho anche provato ad utilizzare Assembly.GetExecutingAssembly().Location e Assembly.GetEntryAssembly().Location prima che il percorso relativo, ma l'assemblea ha deliberato dal Assembly è sempre una libreria .NET .

Come posso caricare il file senza modificarne la posizione nella soluzione?

+0

Si prega di lasciare tag come "C#" nei tag e tenerli fuori dal titolo. Nessun motivo per avere le stesse informazioni in due posti. –

risposta

6

In ASP.NET è necessario utilizzare Server.MapPath() per trovare tutti i file locali.

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

XDocument doc = XDocument.Load(absPath); 
1

per NET applicazioni web utilizzare HttpContext.Current.Server.MapPath("~/"); questo ti porterà la directory radice del file di esecuzione.

Problemi correlati