2009-09-29 31 views
33

No soy capaz de obtener la ruta física actual dentro Application_Start usandoObtener ruta física aplicación actual dentro Application_Start

HttpContext.Current.Request.PhysicalApplicationPath 

porque no hay Solicitud objeto en ese momento.

¿De qué otra forma puedo obtener la ruta física?

+0

Post relacionados [aquí] (https://stackoverflow.com/q/10951599/ 465053). – RBT

Respuesta

41
protected void Application_Start(object sender, EventArgs e) 
{ 
    string path = Server.MapPath("/"); 
    //or 
    string path2 = Server.MapPath("~"); 
    //depends on your application needs 

} 
+2

Más sobre la ruta del servidor: http://stackoverflow.com/a/275791/133665 – HuBeZa

16

Uso Server.MapPath("~")

     

+4

Esto funciona mejor que Server.MapPath ("/"); porque la ruta de la aplicación web puede no ser la misma que la aplicación raíz. –

+9

Y 'HttpRuntime.AppDomainAppPath' funciona mejor que cualquiera de estos, porque funciona en cualquier contexto, incluidos los contextos estáticos, mientras que todas las otras opciones requieren una instancia' HttpServerUtility' para acceder a través de la propiedad 'Servidor', que está disponible solo dentro del contexto de un evento de aplicación como "Application_Start" o dentro de una solicitud web activa. – Triynko

3

utilizar por debajo de código

server.mappath() en asp.net

application.startuppath en aplicación de C# para Windows

22

También puede utilizar

HttpRuntime.AppDomainAppVirtualPath 
+10

Para la ruta física, realmente querría 'HttpRuntime.AppDomainAppPath' que" Obtiene la ruta de la unidad física del directorio de la aplicación alojada en el dominio de la aplicación actual ". 'HttpRuntime.AppDomainAppVirtualPath' en realidad obtiene una ruta virtual como"/MyApp ". De cualquier manera, usar HttpRuntime es la mejor forma de obtener la ruta física de la aplicación, porque está disponible en todos los contextos, incluidos los estáticos incluso antes de que esté disponible un objeto 'HttpApplication'. – Triynko

+1

Las otras soluciones publicadas aquí requieren que se acceda a una instancia 'HttpServerUtility' a través de la propiedad' Server', que está disponible solo en el contexto de un evento de aplicación como "Application_Start" o dentro de una solicitud web activa. – Triynko

+0

'HttpRuntime.AppDomainAppPath' –

3

También existe la HostingEnvironment.MapPath estática

9

Puede utilizar este código:

AppDomain.CurrentDomain.BaseDirectory

2

System.AppDomain.CurrentDomain.BaseDirectory

Esto le dará el directorio de ejecución de su aplicación. Esto incluso funciona para aplicaciones web. Luego, puede alcanzar su archivo.

1

Hay, sin embargo, una ligera diferencia entre todas estas opciones, que

descubrí que

Si lo hace

string URL = Server.MapPath("~"); 

o

string URL = Server.MapPath("/"); 

o

string URL = HttpRuntime.AppDomainAppPath; 

su URL mostrará los recursos en su red de la siguiente manera:

"file:///d:/InetPUB/HOME/Index/bin/Resources/HandlerDoc.htm" 

Pero si usted quiere que su URL para mostrar único camino virtual no la localización de recursos, que debe hacer

string URL = HttpRuntime.AppDomainAppVirtualPath; 

entonces, su URL muestra una ruta virtual a sus recursos de la siguiente manera

"http://HOME/Index/bin/Resources/HandlerDoc.htm"   
16

Creé un sitio web con ASP .Net WebForms donde puede ver el resultado del uso de todos los formularios mencionados en respuestas anteriores de un sitio en Azure.

http://wfserverpaths.azurewebsites.net/

Resumen:


Server.MapPath("/") => D:\home\site\wwwroot\ 

Server.MapPath("~") => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppPath => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppVirtualPath =>/

AppDomain.CurrentDomain.BaseDirectory => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("/") => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("~") => D:\home\site\wwwroot\ 
+0

Cómo puedo obtener: \\ miservidor \ inetpub \ wwwroot \ myfolder en lugar de C: \ inetpub \ wwwroot \ myfolder .... – Si8

+1

Seleccione una de las opciones anteriores y escriba este pequeño código: ' var pathComponents = AppDomain.CurrentDomain.BaseDirectory.Split (':'); pathComponents [0] = @ "\\" + System.Environment.MachineName; var resultPath = string.Join ("", pathComponents); ' – batressc

2

mejor opción es usar

AppDomain.CurrentDomain.BaseDirectory 

porque está en el sist em espacio de nombres y no hay ninguna dependencia a system.web

esta manera su código será más portátil

Cuestiones relacionadas