Для моих приложений я сохраняю некоторый файл конфигурации в xml вместе со сборкой (exe) и другие временные файлы для обработки.
Я нашел причуду с ".\\"
и Application.StartupPath
.
Я использовал
String configPath = ".\\config.xml";
Работает нормально, пока я не позвонил OpenFIleDialog
, чтобы открыть некоторые файлы в других папках, вышеприведенное утверждение не удалось. Очевидно, «. \» Относится к «CurrentDirectory», который меняется каждый раз, когда мы переходим к другой папке.
В какой-то момент я использовал
String configPath = Path.Combine(Application.StartupPath + "config.xml");
В какой-то момент, когда мне нужно выполнить эту сборку из другой папки с помощью Process.Start()
, все начинает разваливаться. Очевидно, рабочий каталог установлен неправильно, и Application.StartupPath
фактически ссылается на рабочий каталог, а не на каталог, из которого выполняется сборка, как я предполагал. Поэтому я вынужден прибегнуть к использованию ProcessInfo для установки рабочего каталога в каталог сборки. У меня также были проблемы с этим, когда я писал VSTO.
Итак, мой вопрос: каков наилучший, самый простой и самый надежный способ получить текущий каталог, который выполняет сборка, без тех недоразумений (или недоразумений), о которых я только что упомянул?
РЕДАКТИРОВАТЬ: я хотел получить каталог, в котором находится сборка
РЕДАКТИРОВАТЬ: Согласно MSDN на AppDomain.BaseDirectory , кажется, что это может быть изменено во время выполнения, что я не хочу (просто, чтобы уточнить, не то, что я не хочу разрешить изменение BaseDirectory, но, скорее, когда я получаю его, не зная точно, было ли оно изменено)
РЕДАКТИРОВАТЬ: Я заметил, что связанный вопрос был опубликован гораздо раньше. Что может вызвать изменение текущего каталога исполняемого приложения?
Спасибо, ребята, за ответ.