Ottenere il percorso dell’attuale assemblea

Come ottengo il percorso dell’assembly corrente? Ho bisogno di ottenere dati da alcuni percorsi relativi alla posizione di hte current assembly (.dll).

Pensavo che qualcuno mi avesse detto di usare lo spazio dei nomi di riflessione ma non riesco a trovare nulla lì dentro.

Puoi usare:

string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath; 

Alcuni suggerimenti nei commenti devono passare attraverso System.Uri.UnescapeDataString (da vvnurmi ) per garantire che qualsiasi codifica percentuale venga gestita e per utilizzare Path.GetFullpath (da TrueWill ) per garantire che il percorso sia in formato Windows standard ( piuttosto che avere barre invece di barre inverse). Ecco un esempio di ciò che ottieni in ogni fase:

 string s = Assembly.GetExecutingAssembly().CodeBase; Console.WriteLine("CodeBase: [" + s + "]"); s = (new Uri(s)).AbsolutePath; Console.WriteLine("AbsolutePath: [" + s + "]"); s = Uri.UnescapeDataString(s); Console.WriteLine("Unescaped: [" + s + "]"); s = Path.GetFullPath(s); Console.WriteLine("FullPath: [" + s + "]"); 

Uscita se stiamo eseguendo C:\Temp\Temp App\bin\Debug\TempApp.EXE :

 CodeBase: [file: /// C: / Temp / Temp App / bin / Debug / TempApp.EXE]
 AbsolutePath: [C: /Temp/Temp%20App/bin/Debug/TempApp.EXE]
 Unescaped: [C: / Temp / Temp App / bin / Debug / TempApp.EXE]
 FullPath: [C: \ Temp \ Temp App \ bin \ Debug \ TempApp.EXE]

System.Reflection. Assembly . GetExecutingAssembly() . Location

Giusto per chiarire:

 Assembly.GetExecutingAssembly().Location 

preferisco

 new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath; 

EscapedCodeBase copre lo scenario in cui il percorso locale potrebbe avere un carattere URI non valido (consultare https://stackoverflow.com/a/21056435/852208 )

LocalPath include il percorso completo per entrambi i percorsi locali e i percorsi unc, in cui AbsolutePath elimina “\\ server”