¿Cómo averiguo en qué directorio se está ejecutando mi aplicación de consola?


Respuestas:


160

Para obtener el directorio donde está el archivo .exe:

AppDomain.CurrentDomain.BaseDirectory

Para obtener el directorio actual:

Environment.CurrentDirectory

2
Gracias. Ayuda cuando el C # .exe está en una carpeta pero se invoca desde otra carpeta (por ejemplo: cuando está en la RUTA del sistema)
DeepSpace101

14
Para .NET Core, lo es System.AppContext.BaseDirectory.
NightOwl888

15

Dependiendo de los derechos otorgados a su aplicación, si la copia de sombra está en efecto o no y otras opciones de invocación y despliegue, diferentes métodos pueden funcionar o producir diferentes resultados, por lo que tendrá que elegir su arma sabiamente. Habiendo dicho eso, todo lo siguiente producirá el mismo resultado para una aplicación de consola totalmente confiable que se ejecuta localmente en la máquina donde reside:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

Deberá consultar la documentación de los miembros anteriores para ver los permisos exactos necesarios.



3

En .NET, puede utilizar System.Environment.CurrentDirectorypara obtener el directorio desde el que se inició el proceso.
System.Reflection.Assembly.GetExecutingAssembly().Locationle dirá la ubicación del ensamblado que se está ejecutando actualmente (eso solo es interesante si el ensamblado que se está ejecutando actualmente se carga desde un lugar diferente a la ubicación del ensamblado donde comenzó el proceso).


1

En Windows (no estoy seguro de Unix, etc.) es el primer argumento en la línea de comandos.

En C / C ++ primer elemento en argv *

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)


Sí, también ocurre lo mismo en .NET. El primer argumento es siempre la ruta completa del ejecutable.
Adam Neal

1

Application.StartUpPath;


¿Quiere enlazar con alguna documentación?
John Sheehan

0

Digamos que el nombre del proyecto de la aplicación de la consola central de .Net es DataPrep.

Obtener el directorio base del proyecto:

Console.WriteLine(Environment.CurrentDirectory);

Salida: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

Salida: ~ DataPrep \


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.