2010-08-11 14 views
51

Necesito la ruta del contenedor del ensamblaje de ejecución. ¿Cómo se obtiene? que tienen una carpeta de plugins de la Papelera/depuración y necesito para obtener la ubicación¿Cómo obtengo Bin Path?

+0

¿Por qué necesita esto? ¿Por qué la aplicación ya no tiene la ruta, parecía encontrar el ensamblaje bien? ¿Cómo se ve tu implementación? – McKay

Respuesta

73

Así es como se 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 en how to determine the Executing Application's Path.

Tenga en cuenta que el valor en path tendrá el formato de file:\c:\path\to\bin\folder, por lo que antes de utilizar la ruta, es posible que deba quitar el file:\ de la parte frontal. Ej .:

path = path.Substring(6); 
+0

Hola, gracias por su pronta respuesta. ¿Por qué es que si codigo el camino lo encuentra y si hago el siguiente código no funciona? La única diferencia que puedo ver es la "\\". ¿Me estoy perdiendo 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 era que System.IO.Path.GetDirectoryName() devuelve una ruta con un "archivo: \\" al principio. Lo eliminé de la cadena y todo funcionó. –

+0

Esto parece ir al directorio cabo – Demodave

50

Usted puede hacer esto

Assembly ass = Assembly.GetExecutingAssembly(); 
    string path = System.IO.Path.GetDirectoryName(ass.Location); 
+6

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

+4

Parece que no funciona si está ejecutando una prueba NUnit. La ruta en ese caso apunta al directorio TEMP. – tponthieux

+10

jaja, nombre de variable dulce – JohnnyFun

6
var assemblyPath = Assembly.GetExecutingAssembly().CodeBase; 
7
Path.GetDirectoryName(Application.ExecutablePath) 

por ejemplo. Valor:

C:\Projects\ConsoleApplication1\bin\Debug 
+3

Nota: esta solución es para Windows.Forms solo – m1m1k

16

Esto es lo que he utilizado para llevar a cabo esto:

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

Esto funcionó perfectamente en IIS hosting y Winform, gracias. – wchoward

Cuestiones relacionadas