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

user9969
quelle
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);
kemiller2002
quelle
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);
Etoisarobot
quelle
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 ?? "");
Thorgeir
quelle
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
var assemblyPath = Assembly.GetExecutingAssembly().CodeBase;
James Curran
quelle
8
Path.GetDirectoryName(Application.ExecutablePath)

z.B. Wert:

C:\Projects\ConsoleApplication1\bin\Debug
Wojtek Turowicz
quelle
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:\\", "");
StealthKK
quelle