Wie bekomme ich Bin Path?


79

Ich muss zum Bin-Pfad der ausführenden Assembly gehen. Wie bekommst du es? Ich habe einen Ordner Plugins in der Bin / Debug und ich muss den Speicherort erhalten


Warum brauchst du das? Warum hat die Anwendung den Pfad nicht bereits, sie schien die Baugruppe in Ordnung zu finden? Wie sieht Ihre Bereitstellung aus?
McKay

Antworten:


118

So erhalten Sie den Ausführungspfad der Anwendung:

var path = System.IO.Path.GetDirectoryName( 
      System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

MSDN enthält eine vollständige Referenz zum Ermitteln des Pfads der ausführenden Anwendung .

Beachten Sie, dass der Wert in pathdie Form file:\c:\path\to\bin\folderhat. Bevor Sie den Pfad verwenden, müssen Sie möglicherweise file:\die Vorderseite entfernen. Z.B:

path = path.Substring(6);

Hallo, danke für deine prompte Antwort. Warum ist es so, dass wenn ich den Pfad fest codiere, er gefunden wird und wenn ich den folgenden Code mache, dies nicht der Fall ist. Der einzige Unterschied, den ich sehen kann, ist das "\\". Vermisse ich etwas var binpath = Path.GetDirectoryName (Assembly.GetExecutingAssembly (). GetName (). CodeBase); var fullpath = Path.Combine (binpath, folderName); if (! Directory.Exists (fullpath)) return;
user9969

6
In meinem Fall bestand das Problem darin, dass System.IO.Path.GetDirectoryName () einen Pfad mit einer "Datei: \\" am Anfang zurückgibt. Ich habe es gerade von der Schnur entfernt und alles hat funktioniert.
Heitor Corrêa

Dies scheint in das Out-Verzeichnis zu gehen
Demodave

1
path = System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly (). CodeBase); das hat bei mir
funktioniert

6
Ich schlage vor, .Replace ("file: \\", "") zu verwenden, um das Dateipräfix zu entfernen, da es spezifischer für das Problem ist.
TinyRacoon

69

Du könntest das tun

    Assembly asm = Assembly.GetExecutingAssembly();
    string path = System.IO.Path.GetDirectoryName(asm.Location);

10
Oder dieses! System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
GONeale

9
Scheint nicht zu funktionieren, wenn Sie einen NUnit-Test ausführen. Der Pfad zeigt in diesem Fall auf das TEMP-Verzeichnis.
tponthieux

Willst du nicht die Eingangsbaugruppe?
N-ate

28

Dies habe ich verwendet, um dies zu erreichen:

System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, System.AppDomain.CurrentDomain.RelativeSearchPath ?? "");

2
Dies funktionierte perfekt in IIS-Hosting und Winform, danke.
Dynamiclynk

Vielen Dank! Dies scheint für die ASP.NET-App und die Konsolen-App zu funktionieren. In asp.net RelativeSearchPathtatsächliche Ordner „sind“ und in der Konsole App enthält das ist nullund BaseDirectorytatsächlich „ist“ Pfad enthält.
Mariusz Pawelski


8
Path.GetDirectoryName(Application.ExecutablePath)

z.B. Wert:

C:\Projects\ConsoleApplication1\bin\Debug

8
Hinweis: Diese Lösung ist nur für Windows.Forms
m1m1k

3
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)?.Replace("file:\\", "");
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.