Beste Weg, um application-Ordner-Pfad
Ich sehe, dass es gibt einige Möglichkeiten, um die Anwendung Ordner-Pfad:
Application.StartupPath
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().Location)AppDomain.CurrentDomain.BaseDirectory
System.IO.Directory.GetCurrentDirectory()
Environment.CurrentDirectory
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)System.IO.Path.GetDirectory(Application.ExecutablePath)
Was ist der beste Weg, je nach situation?
Warum haben wir eine Menge Möglichkeiten, um die Anwendung' Weg. Ich denke, dass es einen Grund gibt für jeden Weg.
Es ist ein Fehler in #6: Lesen sollte: System.Reflexion.Montage.GetExecutingAssembly().GetName().CodeBase), System.IO.Pfad.GetDirectoryName(Application.ExecutablePath)
Hurra für #6, ich bin in einem web-Projekt, ich wollte keine Server.MapPath Logik in meinem IoC-Bibliothek geladen, die nicht web-spezifisch in der Natur
Es ist ein Fehler in #6: Lesen sollte: System.Reflexion.Montage.GetExecutingAssembly().GetName().CodeBase), System.IO.Pfad.GetDirectoryName(Application.ExecutablePath)
Hurra für #6, ich bin in einem web-Projekt, ich wollte keine Server.MapPath Logik in meinem IoC-Bibliothek geladen, die nicht web-spezifisch in der Natur
InformationsquelleAutor Leo Vo | 2011-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
AppDomain.CurrentDomain.BaseDirectory
ist wahrscheinlich der nützlichste für den Zugriff auf Dateien, deren Position relativ zum application install directory.In einem ASP.NET Anwendung, wird diese Anwendung root-Verzeichnis, nicht in den bin-Unterordner - und das ist wahrscheinlich das, was Sie wollen in der Regel. In einer client-Anwendung, es wird das Verzeichnis, das die ausführbare Hauptdatei.
In einem VSTO-2005-Anwendung, es wird das Verzeichnis mit den VSTO verwaltete Assemblys für Ihre Anwendung, nicht, sagen wir, den Pfad zu der ausführbaren Excel.
Den anderen zurückkehren können verschiedene Verzeichnisse in Abhängigkeit von Ihrer Umgebung - z.B. siehe @Vimvq1987 Antwort.
CodeBase
ist der Ort, wo eine Datei wurde gefunden und kann eine URL beginnend mit http://. In dem FallLocation
wird wahrscheinlich die assembly download cache. CodeBase ist nicht garantiert-set für Baugruppen in der GAC.Das klappte auch auf dem Mac mit Xamarin.
+1 @Joe und Für VSTO-Dokument-level-add-in finden Sie unter THIS
Bewusst sein, dass es gibt einen Pfad mit einem backslash am Ende. Dies verursacht mir Probleme bei der Formatierung einer Zeichenfolge mit dem Ergebnis: als ein Prozess, argument.
Wenn Sie die Formatierung einer Zeichenkette, um einen Weg zu errichten, ziehen Sie die Verwendung
Path.Combine
statt. Dieser kümmert sich um den nachgestellten umgekehrten Schrägstrich für Sie.InformationsquelleAutor Joe
Application.StartupPath
und 7.System.IO.Path.GetDirectoryName(Application.ExecutablePath)
- Ist nur zur Arbeit zu gehen, Windows-Forms-AnwendungSystem.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().Location)
Geben Sie etwas wie:
"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Temporary ASP.NET Files\\legal-services\\e84f415e\\96c98009\\assembly\\dl3\\42aaba80\\bcf9fd83_4b63d101"
das ist, wo die Seite, die Sie ausführen.AppDomain.CurrentDomain.BaseDirectory
für die web-Anwendung nützlich sein könnte, und wird wieder so etwas wie"C:\\hg\\Services\\Services\\Services.Website\\"
die Basis-Verzeichnis und ist sehr nützlich.System.IO.Directory.GetCurrentDirectory()
und 5.Environment.CurrentDirectory
erhalten Sie Ort, wo der Prozess gefeuert aus - also für die web app läuft im debug-Modus von Visual Studio so etwas wie
"C:\\Program Files (x86)\\IIS Express"
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
erhalten Sie Ort, wo
.dll
ausgeführt wird der code für web, app, könnte"file:\\C:\\hg\\Services\\Services\\Services.Website\\bin"
Nun im Fall von zum Beispiel console-app Punkte 2-6 werden Verzeichnis, in dem
.exe
Datei ist.Hoffe das spart Euch etwas Zeit.
Das ist die Antwort.
InformationsquelleAutor Matas Vaitkevicius
Beachten Sie, dass nicht alle diese Methoden geben den gleichen Wert zurück. In einigen Fällen können Sie den gleichen Wert zurückgeben, aber vorsichtig sein, Ihre Zwecke sind Verschieden:
gibt die
StartupPath
parameter gesetzt werden kann, wenn die Anwendung ausführen)gibt das aktuelle Verzeichnis zurück, die möglicherweise oder möglicherweise nicht den Ordner wo die Anwendung liegt. Das gleiche gilt für
Environment.CurrentDirectory
. Falls Sie mit diesem in eine DLL-Datei, wird es wieder den Pfad, wo der Prozess ausgeführt wird (dies ist insbesondere wahr in ASP.NET).GetCurrentDirectory()
, für die Liebe zum laufen die Dinge aus verschiedene Wege! 🙁InformationsquelleAutor Vimvq1987
Für eine web-Anwendung, um die aktuelle web-Anwendung root-Verzeichnis, in der Regel call-by-web-Seite für den aktuellen eingehenden Anfrage:
Obigen code Beschreibung
InformationsquelleAutor Raj kumar
Habe ich diese erfolgreich
Funktioniert es auch im inneren linqpad.
behoben. danke..
InformationsquelleAutor camilohe
Begann ich einen Prozess von einem Windows-Dienst über die Win32-API in der Sitzung vom Benutzer tatsächlich eingeloggt ist (im Task-Manager session 1 nicht 0 ist). In diesem war die wir bekommen können, um zu wissen, welche variable ist die beste.
Für alle 7 Fälle aus der Frage oben, die folgenden sind die Ergebnisse:
Vielleicht ist es hilfreich für einige von Euch, das gleiche zu tun Sachen, wenn Sie nach den besten variable für deinen Fall.
InformationsquelleAutor Beetee
Meiner Erfahrung, der beste Weg ist eine Kombination von diesen.
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Geben Sie im bin-Ordner
Directory.GetCurrentDirectory()
Funktioniert gut auf .Net Core aber nicht .Net und geben Sie das root-Verzeichnis des Projekts
System.AppContext.BaseDirectory
undAppDomain.CurrentDomain.BaseDirectory
Funktioniert in .Net, aber nicht .Net-Kern und geben Sie das root-Verzeichnis des Projekts
In eine Bibliothek-Klasse, die soll target.Net und .Net-core-I-prüfen Sie, welches framework hosting der Bibliothek und wählen Sie eine oder das andere.
InformationsquelleAutor Ahmed Mansour
diese one " - System.IO.Pfad.GetDirectory(Anwendung.ExecutablePath)" geändert
System.IO.Pfad.GetDirectoryName(Application.ExecutablePath)
InformationsquelleAutor nazim hatipoglu
Wenn Sie wissen, um die root-Verzeichnis:
InformationsquelleAutor Alparslan ŞEN
Root-Verzeichnis:
InformationsquelleAutor Alparslan ŞEN