¿Cómo obtengo Bin Path?


80

Necesito la ruta bin del ensamblaje en ejecución. ¿Cómo lo conseguiste? Tengo una carpeta de complementos en Bin / Debug y necesito obtener la ubicación


¿Por qué necesitas esto? ¿Por qué la aplicación ya no tiene la ruta, parece encontrar el ensamblado bien? ¿Cómo es su implementación?
McKay

Respuestas:


119

Así es como obtiene la ruta de ejecución de la aplicación:

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

MSDN tiene una referencia completa sobre cómo determinar la ruta de la aplicación en ejecución .

Tenga en cuenta que el valor en pathtendrá la forma de file:\c:\path\to\bin\folder, por lo que antes de usar la ruta, es posible que deba file:\quitar el frente. P.ej:

path = path.Substring(6);

1
Hola, gracias por tu pronta respuesta. ¿Por qué si codifico la ruta, la encuentra y si hago el siguiente código, no lo hace? La única diferencia que puedo ver es el "\\". ¿Me estoy perdiendo de algo? var binpath = Path.GetDirectoryName (Assembly.GetExecutingAssembly (). GetName (). CodeBase); var fullpath = Path.Combine (binpath, folderName); if (! Directory.Exists (fullpath)) return;
user9969

6
En mi caso, el problema fue que System.IO.Path.GetDirectoryName () devuelve una ruta con un "archivo: \\" al principio. Lo quité de la cuerda y todo funcionó.
Heitor Corrêa

Esto parece ir al directorio de salida
Demodave

1
ruta = System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly (). CodeBase); esto funcionó para mí
m1m1k

6
Sugiero usar .Replace ("file: \\", "") para eliminar el prefijo del archivo, ya que es más específico del problema.
TinyRacoon

71

Podrías hacer esto

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

10
¡O esto! System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
GONeale

9
No parece funcionar si está ejecutando una prueba NUnit. La ruta en ese caso apunta al directorio TEMP.
tponthieux

¿No quieres el montaje de entrada?
N-ate

29

Esto es lo que solía lograr con esto:

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

2
Esto funcionó perfectamente en alojamiento IIS y Winform, gracias.
dynamiclynk

¡Gracias! Esto parece funcionar para la aplicación ASP.NET y la aplicación de consola. En asp.net RelativeSearchPathcontiene la carpeta "bin" real y en la aplicación de consola esto es nully BaseDirectorycontiene la ruta "bin" real.
Mariusz Pawelski


8
Path.GetDirectoryName(Application.ExecutablePath)

p.ej. valor:

C:\Projects\ConsoleApplication1\bin\Debug

8
Nota: Esta solución es solo para Windows.Forms
m1m1k

3
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)?.Replace("file:\\", "");
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.