Wie finde ich den Pfad der Anwendung in einer Konsolenanwendung?
Unter Windows-Formulare kann ich verwenden Application.StartupPath
um den aktuellen Pfad zu finden, aber das scheint in einer Konsolenanwendung nicht verfügbar zu sein.
Wie finde ich den Pfad der Anwendung in einer Konsolenanwendung?
Unter Windows-Formulare kann ich verwenden Application.StartupPath
um den aktuellen Pfad zu finden, aber das scheint in einer Konsolenanwendung nicht verfügbar zu sein.
System.Reflection.Assembly.GetExecutingAssembly()
. Location
1
Kombinieren Sie das mit System.IO.Path.GetDirectoryName
wenn Sie nur das Verzeichnis haben wollen.
1 Wie in der Anmerkung von Herrn Mindor:
System.Reflection.Assembly.GetExecutingAssembly().Location
gibt den Ort zurück, an dem sich die ausführende Baugruppe derzeit befindet, was der Ort sein kann, an dem sich die Baugruppe befindet, wenn sie nicht ausgeführt wird, aber auch nicht sein muss. Im Falle von Schattenkopien von Baugruppen erhalten Sie einen Pfad in einem temporären Verzeichnis.System.Reflection.Assembly.GetExecutingAssembly().CodeBase
gibt den 'permanenten' Pfad der Baugruppe zurück.
Sie haben zwei Möglichkeiten, das Verzeichnis der Anwendung zu finden. Welche Sie wählen, hängt von Ihrem Zweck ab.
// to get the location the assembly is executing from
//(not necessarily where the it normally resides on disk)
// in the case of the using shadow copies, for instance in NUnit tests,
// this will be in a temp directory.
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
//To get the location the assembly normally resides on disk or the install directory
string path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
//once you have the path you get the directory with:
var directory = System.IO.Path.GetDirectoryName(path);
Wahrscheinlich ein bisschen spät, aber das ist eine Erwähnung wert:
Environment.GetCommandLineArgs()[0];
Oder besser gesagt, um nur den Verzeichnispfad zu erhalten:
System.IO.Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
Edita:
Mehrere Personen haben darauf hingewiesen, dass GetCommandLineArgs
ist nicht garantiert, dass der Programmname zurückgegeben wird. Siehe Das erste Wort in der Befehlszeile ist nur per Konvention der Programmname . In dem Artikel heißt es: "Obwohl nur sehr wenige Windows-Programme diese Eigenart nutzen (mir selbst sind keine bekannt)". Es ist also möglich, zu "fälschen". GetCommandLineArgs
aber wir sprechen hier von einer Konsolenanwendung. Konsolenanwendungen sind in der Regel schnell und schmutzig. Das passt also zu meiner KISS-Philosophie.
bearbeiten Aus dem Feedback geht hervor, dass die meisten anderen Lösungen nicht funktionieren, wenn Sie ein Unit-Testing-System verwenden. Das macht irgendwie Sinn, da das ausführbare Element nicht Ihre Anwendung, sondern das Testsystem ist. Ich habe das nicht nachgeprüft - ich könnte also völlig falsch liegen. Sollte dies der Fall sein, werde ich diese Bearbeitung löschen.
Für alle, die sich für asp.net-Webanwendungen interessieren. Hier sind meine Ergebnisse von 3 verschiedenen Methoden
protected void Application_Start(object sender, EventArgs e)
{
string p1 = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string p2 = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
string p3 = this.Server.MapPath("");
Console.WriteLine("p1 = " + p1);
Console.WriteLine("p2 = " + p2);
Console.WriteLine("p3 = " + p3);
}
Ergebnis
p1 = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\a897dd66\ec73ff95\assembly\dl3\ff65202d\29daade3_5e84cc01
p2 = C:\inetpub\SBSPortal_staging\
p3 = C:\inetpub\SBSPortal_staging
die Anwendung wird physisch von " C:\inetpub\SBSPortal_staging "Die erste Lösung ist also definitiv nicht für Webanwendungen geeignet.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
7 Stimmen
Installieren Sie .NET Framework auf dem Zielcomputer (Client, Entwicklung)? wenn Ihre Antwort wahr ist; So können Sie einen Verweis auf System.Windows.Forms.dll hinzufügen und Application.StartupPath verwenden! Dies ist der beste Weg, wenn Sie weitere zukünftige Ausnahmen vermeiden wollen!
0 Stimmen
AppDomain.BaseDirectory ist das App-Verzeichnis. Beachten Sie, dass sich die Anwendung in der VS-Umgebung anders verhalten kann als in der Win-Umgebung. Aber AppDomain sollte gleich sein, nicht wie application.path, aber ich hoffe, dass dies nicht nur für IIS ist.