ventajas - visual basic.net download
Obteniendo la ruta del ensamblado actual (4)
¿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 codificación, 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]
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://.com/a/21056435/852208 )
LocalPath incluye la ruta completa para las rutas locales y unc, donde AbsolutePath ajusta "// server"
System.Reflection.
Assembly
. GetExecutingAssembly()
. Location