Der beste Weg, den Pfad zum Anwendungsordner zu ermitteln

Ich sehe, dass es einige Möglichkeiten gibt, den Pfad zum Anwendungsordner zu ermitteln:

  1. Anwendung.StartupPfad
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
  3. AppDomain.CurrentDomain.BaseDirectory
  4. System.IO.Directory.GetCurrentDirectory()
  5. Umgebung.CurrentDirectory`
  6. System.IO.Path.GetDirectoryName() System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)`
  7. System.IO.Path.GetDirectory(Application.ExecutablePath)

Was ist je nach Situation der beste Weg?

Lösung

AppDomain.CurrentDomain.BaseDirectory" ist wahrscheinlich am nützlichsten für den Zugriff auf Dateien, deren Speicherort relativ zum Installationsverzeichnis der Anwendung ist.

In einer ASP.NET-Anwendung wird dies das Stammverzeichnis der Anwendung sein, nicht der Unterordner bin - was Sie wahrscheinlich normalerweise wollen. In einer Client-Anwendung ist es das Verzeichnis, das die ausführbare Datei enthält.

In einer VSTO 2005-Anwendung ist dies das Verzeichnis, das die von VSTO verwalteten Baugruppen für Ihre Anwendung enthält, und nicht etwa der Pfad zur ausführbaren Excel-Datei.

Die anderen können je nach Umgebung unterschiedliche Verzeichnisse zurückgeben - siehe zum Beispiel @Vimvq1987's Antwort.

CodeBase" ist der Ort, an dem eine Datei gefunden wurde und kann eine URL sein, die mit http:// beginnt. In diesem Fall wird Location wahrscheinlich der Assembly-Download-Cache sein. Es ist nicht garantiert, dass CodeBase für Assemblies im GAC gesetzt ist.

Kommentare (10)

Beachten Sie, dass nicht alle diese Methoden denselben Wert zurückgeben. In einigen Fällen können sie denselben Wert zurückgeben, aber seien Sie vorsichtig, ihre Zwecke sind unterschiedlich:

Application.StartupPath

gibt den Parameter StartupPath zurück (kann beim Ausführen der Anwendung gesetzt werden)

System.IO.Directory.GetCurrentDirectory()

gibt das aktuelle Verzeichnis zurück, das der Ordner sein kann, in dem sich die Anwendung befindet, aber nicht muss. Das gleiche gilt für Environment.CurrentDirectory. Falls Sie dies in einer DLL-Datei verwenden, wird der Pfad zurückgegeben, in dem der Prozess läuft (dies gilt insbesondere für ASP.NET).

Kommentare (3)

Um bei einer Webanwendung das aktuelle Stammverzeichnis der Webanwendung zu erhalten, rufen Sie im Allgemeinen die Webseite für die aktuelle eingehende Anfrage auf:

HttpContext.Current.Server.MapPath();

System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

Beschreibung des obigen Codes

Kommentare (0)