Obteniendo la ruta del ensamblado actual

¿Cómo obtengo la ruta del ensamblaje actual? Necesito obtener datos de algunas rutas relativas a la ubicación de su conjunto actual (.dll).

Pensé que alguien me había dicho que usara el espacio de nombres de reflexión, pero no puedo encontrar nada allí.

Puedes usar:

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

Algunas sugerencias en los comentarios son pasarlo a través de System.Uri.UnescapeDataString (desde vvnurmi ) para garantizar que se maneje cualquier porcentaje de encoding, y usar Path.GetFullpath (de TrueWill ) para asegurar que la ruta esté en forma estándar de Windows ( en lugar de tener barras en lugar de barras diagonales inversas). Aquí hay un ejemplo de lo que obtienes en cada etapa:

 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 + "]"); 

Salida si estamos ejecutando 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

Sólo para que quede claro:

 Assembly.GetExecutingAssembly().Location 

yo prefiero

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

EscapedCodeBase cubre el escenario en el que su ruta local podría tener un carácter de URI no válido (consulte https://stackoverflow.com/a/21056435/852208 )

LocalPath incluye la ruta completa para las rutas locales y unc, donde AbsolutePath ajusta “\\ server”