2010-09-14 23 views
5

Tengo una clase estática en una carpeta sin raíz en mi solución. En esa carpeta de clase estática, hay una subcarpeta que contiene archivos XML. Así que tengo estos archivos:Obtener la ruta del archivo en ASP.NET y XDocument.Load

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

que estoy teniendo problemas para usar XDocument.Load() con esos archivos XML. Específicamente, estoy tratando de cargar los archivos XML desde el constructor estático de MyStaticClass.

XDocument.Load() Parece que no puede encontrar los archivos, sin embargo. He intentado todos estos y ninguno trabaja: (¿porque el tipo se está inicializando)

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

También he intentado usar Assembly.GetExecutingAssembly().Location y Assembly.GetEntryAssembly().Location antes de que la ruta relativa, pero la asamblea resuelto por Assembly siempre es una biblioteca .NET .

¿Cómo puedo cargar el archivo sin cambiar su ubicación en la solución?

+0

Deje etiquetas como "C#" en las etiquetas y manténgalas fuera del título. No hay razón para tener la misma información en dos lugares. –

Respuesta

6

En ASP.NET debe usar Server.MapPath() para buscar todos los archivos locales.

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

XDocument doc = XDocument.Load(absPath); 
1

para .NET aplicaciones web utilizan HttpContext.Current.Server.MapPath("~/"); esta manera se consigue que el directorio raíz del archivo de ejecución.

Cuestiones relacionadas