Para mis aplicaciones, almaceno algunos archivos de configuración en xml junto con el ensamblado (exe) y otros archivos temporales para fines de proceso.Cuál es la mejor manera de obtener el directorio desde el que se está ejecutando un ensamblaje
Encontré algunas peculiaridades con ".\\"
y Application.StartupPath
.
He estado usando
String configPath = ".\\config.xml";
Funciona bien hasta que se llama OpenFIleDialog
abrir algunos archivos en otras carpetas, la afirmación anterior fracasaron. Aparentemente ". \" Se refiere a "CurrentDirectory", que cambia cada vez que navegamos a otra carpeta.
En algún momento, yo estaba usando
String configPath = Path.Combine(Application.StartupPath + "config.xml");
En algún momento, cuando necesito para ejecutar este montaje de otra carpeta utilizando Process.Start()
, las cosas comienzan a desmoronarse. Aparentemente, el directorio de trabajo no está configurado correctamente, y Application.StartupPath
se está refiriendo al directorio de trabajo en lugar del directorio en el que se está ejecutando el ensamblado, como he supuesto. Así que tengo que recurrir a ProcessInfo para configurar el directorio de trabajo en el directorio del ensamblado. También tuve un problema con esto cuando escribía VSTO.
Entonces, mi pregunta es, ¿cuál es la mejor manera, la más simple y segura de obtener el directorio actual que está ejecutando el ensamblado, sin esos caprichos (o malentendidos) que acabo de mencionar?
EDIT: Me refería a obtener el directorio de la cual el conjunto residen
EDIT: De acuerdo con MSDN en AppDomain.BaseDirectory, parece que puede haber cambios durante el tiempo de ejecución, que es lo que no quiero (sólo para aclarar , no es que no quiera permitir el cambio de BaseDirectory, sino más bien, cuando lo recupere sin saber con certeza si ha sido cambiado)
EDIT: he notado que una pregunta relacionada fue publicada mucho antes. What would cause the current directory of an executing app to change?
Gracias chicos por la respuesta.
¿este método involucra la reflexión? como en el impacto en el rendimiento? – faulty
No estoy seguro de que haya una correlación 1: 1 entre "reflexión" e "impacto en el rendimiento"; está en el espacio de nombres de Reflexión, pero no se refleja en el conjunto, está utilizando los metadatos que ya conoce. – GalacticCowboy
Sí ... Haga solo UNA LLAMADA como esta para ver cómo absorbe todos sus ciclos de CPU y convierte su Xeon Octa-core en un HP12c. Porque cualquiera sabe que Reflection es el engendro de Satanás y representa todo lo que es verdad en el mundo (créditos a Scott Hanselman por el nombre :)) –