Come faccio a sapere in quale directory è in esecuzione la mia app console con C #?
Come faccio a sapere in quale directory è in esecuzione la mia app console con C #?
Risposte:
Per ottenere la directory in cui si trova il file .exe:
AppDomain.CurrentDomain.BaseDirectory
Per ottenere la directory corrente:
Environment.CurrentDirectory
System.AppContext.BaseDirectory
.
A seconda dei diritti concessi alla tua applicazione, indipendentemente dal fatto che la copia shadow sia attiva o meno e altre opzioni di invocazione e distribuzione, metodi diversi potrebbero funzionare o produrre risultati diversi, quindi dovrai scegliere saggiamente la tua arma. Detto questo, tutto quanto segue produrrà lo stesso risultato per un'applicazione console completamente attendibile che viene eseguita localmente sulla macchina in cui risiede:
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 );
Dovrai consultare la documentazione dei membri di cui sopra per vedere le autorizzazioni esatte necessarie.
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Posizione)
In .NET, è possibile utilizzare System.Environment.CurrentDirectory
per ottenere la directory da cui è stato avviato il processo.
System.Reflection.Assembly.GetExecutingAssembly().Location
ti dirà la posizione dell'assembly attualmente in esecuzione (è interessante solo se l'assembly attualmente in esecuzione viene caricato da un luogo diverso dalla posizione dell'assembly in cui è iniziato il processo).
Su Windows (non sono sicuro di Unix ecc.) È il primo argomento nella riga di comando.
In C / C ++ il primo elemento in argv *
WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)
Supponiamo che il nome del progetto dell'applicazione della console principale .Net sia DataPrep.
Ottieni directory di base del progetto:
Console.WriteLine(Environment.CurrentDirectory);
Risultato: ~ DataPrep \ bin \ Debug \ netcoreapp2.2
Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);
Uscita: ~ DataPrep \
Utilizzare AppContext.BaseDirectory
per .net5.