¿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
Hallgrim
fuente
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.

Atif Aziz
fuente
5

Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Ubicación)

Jason Kanaris
fuente
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).

Travis Illig
fuente
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)

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

Application.StartUpPath;


fuente
¿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 \

RM Shahidul Islam Shahed
fuente
0

Úselo AppContext.BaseDirectorypara .net5.

vivek nuna
fuente