Pregunta ¿Cómo puedo obtener la ruta de la aplicación en una aplicación de consola .NET?


¿Cómo encuentro la ruta de la aplicación en una aplicación de consola?

En Formularios de Windows, Puedo usar Application.StartupPath para encontrar la ruta actual, pero esto no parece estar disponible en una aplicación de consola.


809
2018-05-07 23:05


origen


Respuestas:


System.Reflection.Assembly.GetExecutingAssembly().Location1

Combine eso con System.IO.Path.GetDirectoryName si todo lo que quieres es el directorio.

1Según el comentario del Sr. Mindor:
System.Reflection.Assembly.GetExecutingAssembly().Location devuelve donde se encuentra actualmente el ensamblaje en ejecución, que puede o no estar donde se encuentra el ensamblado cuando no se está ejecutando. En el caso de ensambles de copia de sombra, obtendrá una ruta en un directorio temporal. System.Reflection.Assembly.GetExecutingAssembly().CodeBase devolverá la ruta 'permanente' del conjunto.


1035
2018-05-07 23:09



Puede usar el siguiente código para obtener el directorio de la aplicación actual.

AppDomain.CurrentDomain.BaseDirectory

361
2018-05-08 19:03



Tienes dos opciones para encontrar el directorio de la aplicación, que elijas dependerá de tu propósito.

// to get the location the assembly is executing from
//(not necessarily where the it normally resides on disk)
// in the case of the using shadow copies, for instance in NUnit tests, 
// this will be in a temp directory.
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;

//To get the location the assembly normally resides on disk or the install directory
string path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;

//once you have the path you get the directory with:
var directory = System.IO.Path.GetDirectoryName(path);

122
2017-10-14 18:27



Probablemente un poco tarde, pero vale la pena mencionarlo:

Environment.GetCommandLineArgs()[0];

O más correctamente para obtener solo la ruta del directorio:

System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);

Editar:

Muchas personas han señalado que GetCommandLineArgs no se garantiza que devuelva el nombre del programa. Ver La primera palabra en la línea de comando es el nombre del programa solo por convención. El artículo establece que "aunque muy pocos programas de Windows usan esta peculiaridad (no estoy al tanto de ninguno)". Entonces es posible 'parodia' GetCommandLineArgs, pero estamos hablando de una aplicación de consola. Las aplicaciones de la consola generalmente son rápidas y sucias. Así que esto encaja con mi filosofía KISS.


72
2018-05-21 13:27



Para cualquier persona interesada en las aplicaciones web asp.net. Aquí están mis resultados de 3 métodos diferentes

protected void Application_Start(object sender, EventArgs e)
{
  string p1 = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
  string p2 = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
  string p3 = this.Server.MapPath("");
  Console.WriteLine("p1 = " + p1);
  Console.WriteLine("p2 = " + p2);
  Console.WriteLine("p3 = " + p3);
}

resultado

p1 = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\a897dd66\ec73ff95\assembly\dl3\ff65202d\29daade3_5e84cc01
p2 = C:\inetpub\SBSPortal_staging\
p3 = C:\inetpub\SBSPortal_staging

la aplicación se ejecuta físicamente desde "C: \ inetpub \ SBSPortal_staging", por lo que la primera solución definitivamente no es apropiada para aplicaciones web.


38
2017-10-06 19:42



La respuesta anterior era el 90% de lo que necesitaba, pero devolví un Uri en lugar de una ruta normal para mí.

Como se explica en la publicación de los foros de MSDN, ¿Cómo convertir ruta URI a ruta de archivo normal?, Utilicé lo siguiente:

// Get normal filepath of this assembly's permanent directory
var path = new Uri(
    System.IO.Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
    ).LocalPath;

34
2018-04-13 20:20



Puede estar buscando hacer esto:

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

26
2018-05-07 23:10



puedes usar este en su lugar.

System.Environment.CurrentDirectory

18
2017-11-15 20:06



Para las aplicaciones de consola, puede intentar esto:

System.IO.Directory.GetCurrentDirectory();

Salida (en mi máquina local):

c: \ users \ xxxxxxx \ documents \ visual studio 2012 \ Projects \ ImageHandler \ GetDir \ bin \ Debug

O puede intentar (hay una barra invertida adicional al final):

AppDomain.CurrentDomain.BaseDirectory

Salida:

c: \ users \ xxxxxxx \ documents \ visual studio 2012 \ Projects \ ImageHandler \ GetDir \ bin \ Debug \


17
2018-06-18 21:34



He usado este código y tengo la solución.

AppDomain.CurrentDomain.BaseDirectory

12
2018-01-31 08:17



Utilizo esto si se supone que se debe llamar al ejecutando haciendo doble clic en él

var thisPath = System.IO.Directory.GetCurrentDirectory();

7
2018-02-15 18:19