2012-03-07 12 views
5

Siendo nuevo en ASP.NET no estoy seguro de la mejor solución a mi problema. Tengo una línea de código como:Rutas relativas en un código de aplicación ASP.NET detrás de

xDoc.Load("Templates/template1.cfg"); 

xdoc es un XmlDocument. En mi proyecto, en el nivel superior hay un directorio llamado Plantillas. Cuando ejecuto el proyecto en modo de depuración, obtengo un DirectoryNotFoundException, y aparentemente estoy buscando el directorio de plantillas en C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\Templates.

¿Cómo se puede apuntar correctamente a ese directorio sin hardcoding?

+6

¿Ha mirado 'Server.MapPath'? – asawyer

Respuesta

15

Server.MapPath - devuelve la ruta de la ruta relativa; ~ asegura la ruta relativa está relacionada con la raíz de la aplicación

xDoc.Load(Server.MapPath("~/Templates/template.cfg")); 
+2

Gracias. Tú y @asawyer son acertados. Problema resuelto. – kmarks2

+0

Tan simple pero aún así exactamente lo que necesitaba. Esto es muy útil. Gracias –

3
xDoc.Load("~/Templates/template.cfg"); 

podría funcionar?

1

Usa una tilde "~" en tu camino.

xDoc.Load("~/Templates/template1.cfg"); 

La tilde representa el directorio base para su aplicación.

+0

Desafortunadamente eso fue lo que intenté primero, con el mismo problema. Lo cual es extraño porque ~/funciona bien en las páginas aspx. – kmarks2

+0

Sí, xDoc no sabrá que se está utilizando en el contexto de una aplicación ASP.NET. Echa un vistazo a Server.MapPath. – n8wrl

7

utilizaría probablemente

xDoc.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Templates/Template.cfg")); 

Esto hace que el código XML de carga independiente de ASP.NET. Si tuviera que reutilizarlo en, digamos, una aplicación de Windows Forms, esto daría una ruta relativa al directorio que contiene los formularios de Windows exectuable.

3

Probar:

xDoc.Load(Server.MapPath("~/Templates/template1.cfg")); 
Cuestiones relacionadas