¿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

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

p.ej. valor:

C:\Projects\ConsoleApplication1\bin\Debug
Wojtek Turowicz
fuente
8
Nota: Esta solución es solo para Windows.Forms
m1m1k
3
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)?.Replace("file:\\", "");
StealthKK
fuente