La mejor manera de obtener la ruta de la carpeta de la aplicación

Resuelto Leo Vo asked hace 13 años • 11 respuestas

Veo que hay algunas formas de obtener la ruta de la carpeta de la aplicación:

  1. Application.StartupPath
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
  3. AppDomain.CurrentDomain.BaseDirectory
  4. System.IO.Directory.GetCurrentDirectory()
  5. Environment.CurrentDirectory
  6. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  7. System.IO.Path.GetDirectory(Application.ExecutablePath)

¿Cuál es la mejor manera dependiendo de la situación?

Leo Vo avatar May 18 '11 14:05 Leo Vo
Aceptado

AppDomain.CurrentDomain.BaseDirectoryes probablemente el más útil para acceder a archivos cuya ubicación es relativa al directorio de instalación de la aplicación.

En una aplicación ASP.NET, este será el directorio raíz de la aplicación, no la subcarpeta bin, que probablemente sea lo que normalmente desea. En una aplicación cliente, será el directorio que contiene el ejecutable principal.

En una aplicación VSTO 2005, será el directorio que contiene los ensamblados administrados por VSTO para su aplicación, no, por ejemplo, la ruta al ejecutable de Excel.

Los demás pueden devolver directorios diferentes según su entorno; por ejemplo, consulte la respuesta de @ Vimvq1987.

CodeBasees el lugar donde se encontró un archivo y puede ser una URL que comienza con http://. En cuyo caso Locationprobablemente será el caché de descarga del ensamblado. No se garantiza que CodeBase esté configurado para ensamblados en el GAC .

ACTUALIZACIÓN En estos días (.NET Core, .NET Standard 1.3+ o .NET Framework 4.6+) es mejor usar AppContext.BaseDirectoryen lugar de AppDomain.CurrentDomain.BaseDirectory. Ambos son equivalentes, pero ya no se admiten varios AppDomains .

Joe avatar May 18 '2011 07:05 Joe
  1. Application.StartupPathy 7. System.IO.Path.GetDirectoryName(Application.ExecutablePath)- Sólo funcionará para la aplicación Windows Forms

  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)

    Le dará algo como: "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Temporary ASP.NET Files\\legal-services\\e84f415e\\96c98009\\assembly\\dl3\\42aaba80\\bcf9fd83_4b63d101"cuál es donde está la página que está ejecutando.

  3. AppDomain.CurrentDomain.BaseDirectorypara la aplicación web podría ser útil y devolverá algo como "C:\\hg\\Services\\Services\\Services.Website\\"cuál es el directorio base y es bastante útil.

  4. System.IO.Directory.GetCurrentDirectory()y 5.Environment.CurrentDirectory

obtendrá la ubicación desde donde se activó el proceso, por lo que para la aplicación web que se ejecuta en modo de depuración desde Visual Studio, algo así como"C:\\Program Files (x86)\\IIS Express"

  1. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

obtendrá la ubicación donde .dllse está ejecutando el código, para la aplicación web que podría ser"file:\\C:\\hg\\Services\\Services\\Services.Website\\bin"

Ahora, en el caso de, por ejemplo, los puntos 2 a 6 de la aplicación de consola, será el directorio donde .exe se encuentra el archivo.

Espero que esto te ahorre algo de tiempo.

Matas Vaitkevicius avatar Feb 09 '2016 15:02 Matas Vaitkevicius

Tenga en cuenta que no todos estos métodos devolverán el mismo valor. En algunos casos pueden devolver el mismo valor, pero ojo, sus propósitos son diferentes:

Application.StartupPath

devuelve el StartupPathparámetro (se puede configurar al ejecutar la aplicación)

System.IO.Directory.GetCurrentDirectory()

devuelve el directorio actual, que puede ser o no la carpeta donde se encuentra la aplicación. Lo mismo va para Environment.CurrentDirectory. En caso de que esté utilizando esto en un archivo DLL, devolverá la ruta donde se está ejecutando el proceso (esto es especialmente cierto en ASP.NET).

Delta76 avatar May 18 '2011 07:05 Delta76

Para una aplicación web, para obtener el directorio raíz de la aplicación web actual, generalmente llame a través de la página web para la solicitud entrante actual:

HttpContext.Current.Server.MapPath();

System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

Descripción del código anterior

Raj Kumar - rajkrs avatar Jun 06 '2015 06:06 Raj Kumar - rajkrs