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