2010-07-17 12 views
5

Sé que en el mismo directorio donde se está ejecutando mi código se encuentran algunos archivos. Tengo que encontrarlos y pasar a otro método:Obtener el directorio donde se encuentra el código ejecutado

MyLib.dll 
Target1.dll 
Target2.dll 

Foo(new[] { "..\\..\\Target1.dll", "..\\..\\Target2.dll" }); 

Así que llaman System.IO.Directory.GetFiles(path, "*.dll"). Pero ahora necesito conocer la ruta:

string path = new FileInfo((Assembly.GetExecutingAssembly().Location)).Directory.FullName) 

pero ¿hay más corto camino?

+0

[Este post] (http://stackoverflow.com/questions/3163495/better-way-to-get-the-base-directory) debería darle algunas opciones – mhenrixon

Respuesta

6

Puede probar la propiedad Environment.CurrentDirectory. Tenga en cuenta que dependiendo del tipo de aplicación (Consola, WinForms, ASP.NET, Servicio de Windows, ...) y la forma en que se ejecuta, esto podría comportarse de manera diferente.

+0

Estoy ejecutando la prueba NUnit. En el mundo real llamo 'Foo (Server.MapPath (" ~/bin "))' pero en la prueba solo quiero escanear el directorio raíz del ensamblado que contiene la prueba – abatishchev

+0

¡Gracias! 'Environment.CurrentDirectory' es lo que estaba buscando. Mi llamada devuelve algo de Temp, pero tu - exactamente lo que necesito. – abatishchev

+1

Environment.CurrentDirectory no funciona como estaba previsto en todo momento. Si su aplicación accede al cuadro de diálogo estándar Abrir archivo de Windows y selecciona alguna ruta allí, la siguiente llamada a Environment.CurrentDirectory devolverá la última ruta seleccionada en el cuadro de diálogo Abrir archivo en lugar de la ruta al programa en ejecución. – 10100111001

2

Environment.CurrentDirectory devuelve el directorio actual, no el directorio donde se encuentra el código ejecutado. Si usa Directory.SetCurrentDirectory, o si inicia el programa mediante un acceso directo donde está establecido el directorio, este no será el que está buscando.

Se adhieren a su solución original. Ocultar la aplicación (y hacerla más corta) utilizando una propiedad:

private DirectoryInfo ExecutingFolder 
{ 
    get 
    { 
     return new DirectoryInfo (
      System.IO.Path.GetDirectoryName (
       System.Reflection.Assembly.GetExecutingAssembly().Location)); 
    } 
} 
Cuestiones relacionadas