¿Cómo averiguo en qué directorio se ejecuta mi aplicación de consola con C #?
¿Cómo averiguo en qué directorio se ejecuta mi aplicación de consola con C #?
Respuestas:
Para obtener el directorio donde está el archivo .exe:
AppDomain.CurrentDomain.BaseDirectory
Para obtener el directorio actual:
Environment.CurrentDirectory
System.AppContext.BaseDirectory
.
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.
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Ubicación)
En .NET, puede utilizar System.Environment.CurrentDirectory
para obtener el directorio desde el que se inició el proceso.
System.Reflection.Assembly.GetExecutingAssembly().Location
le 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).
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)
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 \
Úselo AppContext.BaseDirectory
para .net5.