Veo que hay algunas formas de obtener la ruta de la carpeta de la aplicación:
Application.StartupPath
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
.DominioDeLaAplicación.DominioActual.DirectorioBase
.System.IO.Directory.GetCurrentDirectory()
¿Cuál es la mejor manera dependiendo de la situación?
AppDomain.CurrentDomain.BaseDirectory
es probablemente la 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 es probablemente lo que usted quiere normalmente. En una aplicación cliente, será el directorio que contiene el ejecutable principal.
En una aplicación VSTO 2005, será el directorio que contenga los ensamblajes gestionados por VSTO para su aplicación, no, por ejemplo, la ruta del ejecutable de Excel.
Los otros pueden devolver diferentes directorios dependiendo de su entorno - por ejemplo, vea la respuesta de @Vimvq1987'.
CodeBase
es el lugar donde se encontró un archivo y puede ser una URL que comienza con http://. En cuyo caso Location
será probablemente la caché de descarga de ensamblajes. No se garantiza que CodeBase se establezca para los ensamblajes en el GAC.
Tenga en cuenta que no todos estos métodos devolverán el mismo valor. En algunos casos, pueden devolver el mismo valor, pero ten cuidado, sus propósitos son diferentes:
Application.StartupPath
devuelve el parámetro StartupPath
(se puede establecer cuando se ejecuta 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 ocurre con Environment.CurrentDirectory
. En caso de que se utilice en un archivo DLL, devolverá la ruta de donde se está ejecutando el proceso (esto es especialmente cierto en ASP.NET).
En el caso de una aplicación web, para obtener el directorio raíz de la aplicación web actual, generalmente se llama por página web a la petición entrante actual:
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;