Wie finde ich heraus, in welchem Verzeichnis meine Konsolen-App mit C # ausgeführt wird?
Wie finde ich heraus, in welchem Verzeichnis meine Konsolen-App mit C # ausgeführt wird?
Antworten:
So rufen Sie das Verzeichnis ab, in dem sich die EXE-Datei befindet:
AppDomain.CurrentDomain.BaseDirectory
So rufen Sie das aktuelle Verzeichnis ab:
Environment.CurrentDirectory
System.AppContext.BaseDirectory.
Abhängig von den für Ihre Anwendung gewährten Rechten, unabhängig davon, ob das Kopieren von Schatten aktiviert ist oder nicht, und anderen Aufruf- und Bereitstellungsoptionen können unterschiedliche Methoden funktionieren oder zu unterschiedlichen Ergebnissen führen, sodass Sie Ihre Waffe mit Bedacht auswählen müssen. Allerdings führen alle folgenden Aktionen für eine vollständig vertrauenswürdige Konsolenanwendung, die lokal auf dem Computer ausgeführt wird, auf dem sie sich befindet, zum gleichen Ergebnis:
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 );
Sie müssen die Dokumentation der oben genannten Mitglieder konsultieren, um die genauen erforderlichen Berechtigungen zu erhalten.
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Location)
In .NET können Sie System.Environment.CurrentDirectorydas Verzeichnis abrufen, aus dem der Prozess gestartet wurde.
System.Reflection.Assembly.GetExecutingAssembly().Locationzeigt Ihnen den Speicherort der aktuell ausgeführten Assembly an (dies ist nur interessant, wenn die aktuell ausgeführte Assembly von einem anderen Ort als dem Speicherort der Assembly geladen wird, an dem der Prozess gestartet wurde).
Unter Windows (nicht sicher über Unix usw.) ist dies das erste Argument in der Befehlszeile.
In C / C ++ wird das Element in argv * angezeigt
WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)
Angenommen, der Projektname Ihrer .Net-Kernkonsolenanwendung lautet DataPrep.
Projektbasisverzeichnis abrufen:
Console.WriteLine(Environment.CurrentDirectory);
Ausgabe: ~ DataPrep \ bin \ Debug \ netcoreapp2.2
Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);
Ausgabe: ~ DataPrep \
Verwenden Sie AppContext.BaseDirectoryfür .net5.