2012-06-12 12 views
41

He intentado conseguir el directorio de la aplicación de consola utilizando el código de abajo,Como llegar directorio de ejecución de aplicación de consola

Assembly.GetExecutingAssembly().Location 

pero este me da donde reside el montaje. Esto puede ser diferente de donde ejecuté la aplicación.

Mi aplicación de consola analiza los registros sin parámetros. Debe ir a la carpeta logs/ dentro de la carpeta del ejecutable o si le doy una ruta al logs/ lo analiza.

+0

Tener un vistazo a esta pregunta: http://stackoverflow.com/questions/ 674857/should-i-use-appdomain-currentdomain-basedirectory-or-system-environment-current – Karsten

Respuesta

69

Use Environment.CurrentDirectory.

Obtiene o establece la ruta completa del directorio de trabajo actual.
(MSDN Environment.CurrentDirectory Property)

string logsDirectory = Path.Combine(Environment.CurrentDirectory, "logs"); 

Si su aplicación se ejecuta en c: \ Foo \ BarlogsDirectory apuntará a c: \ Foo \ Bar \ logs.

+15

El directorio actual es diferente de la direc tory que contiene el ejecutable actual. – KFL

+0

Environment.CurrentDirectory es un valor que puede cambiar y cambiará durante el transcurso de la ejecución de la aplicación. Por ejemplo, usando parámetros predeterminados, OpenFileDialog en WinForms cambiará este valor al directorio donde se seleccionó el archivo de –

6

manera más segura:

string temp = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 
+3

CodeBase es una URL al lugar donde se encontró el archivo, mientras que la ubicación es la ruta desde donde estaba realmente cargado. Por ejemplo, si el ensamblado se descargó de Internet, su CodeBase puede comenzar con "http: //", pero su ubicación puede comenzar con "C: \". Si el archivo fue copiado en la sombra, la ubicación sería la ruta a la copia del archivo en el directorio shadow-copy. También es bueno saber que no se garantiza que CodeBase esté configurado para ensamblajes en el GAC. Sin embargo, siempre se establecerá la ubicación para los ensamblados cargados desde el disco. –

+0

Asegurándome de que el archivo está en el disco, utilizo esta versión para obtener una ruta "normal" en lugar de una ruta 'file: //': 'Path.GetDirectoryName (new Uri (this.GetType(). Assembly.GetName() .CodeBase) .LocalPath) ' – Timo

16

Utilice esta:

System.Reflection.Assembly.GetExecutingAssembly().Location 

Combine eso con

System.IO.Path.GetDirectoryName if all you want is the directory. 
+2

[Fuente] (http://stackoverflow.com/a/837501/397322) – William

+0

Si uso Environment.CurrentDirectory que se ejecuta bajo la Tarea programada, irá a C: \ Windows \ system32 \ log que no es la ruta de ejecución. Luego uso este System.Reflection.Assembly.GetExecutingAssembly(). Ubicación, apunta a mi ruta correcta de ejecución de ejecutables. ¡Gracias! – LifeiSHot

+0

Esto puede no funcionar como espera en pruebas unitarias o proyectos web que ejecutan IIS local. La respuesta 'CodeBase' hace. – Timo

Cuestiones relacionadas