Следует ли мне использовать AppDomain.CurrentDomain.BaseDirectory или System.Environment.CurrentDirectory? - PullRequest
78 голосов
/ 23 марта 2009

У меня есть два exe-файла в одной папке, я могу запустить exe2 с помощью кнопки в exe1. Сегодня я наблюдал за клиентом через удаленный сеанс (терминальные службы), и exe2 не удалось запустить ошибку «Файл не найден», но exe1 был в том же каталоге, когда мы проверяли. Поэтому я должен использовать AppDomain.CurrentDomain.BaseDirectory или System.Environment.CurrentDirectory ?

Спасибо

Ответы [ 7 ]

171 голосов
/ 23 марта 2009

Если вы хотите найти файлы в том же каталоге, что и ваше приложение, AppDomain.CurrentDomain.BaseDirectory - правильный выбор.

Environment.CurrentDirectory - это значение, которое может и будет меняться в процессе работы вашего приложения. Например, используя параметры по умолчанию, OpenFileDialog в WinForms изменит это значение на каталог, из которого был выбран файл.

16 голосов
/ 23 марта 2009

AppDomain.CurrentDomain.BaseDirectory возвращает каталог, из которого был загружен текущий домен приложения. System.Environment.CurrentDirectory возвращает текущий системный каталог. В вашем случае AppDomain.CurrentDomain.BaseDirectory является лучшим решением.

12 голосов
/ 14 мая 2014

Вы должны использовать AppDomain.CurrentDomain.BaseDirectory.

Например, в приложении служб Windows:

System.Environment.CurrentDirectory вернет C: \ Windows \ system32

Пока

AppDomain.CurrentDomain.BaseDirectory вернет [расположение приложения.exe]

Еще один важный фактор, который следует отметить, это то, что AppDomain.CurrentDomain.BaseDirectory является свойством только для чтения, тогда как Environment.CurrentDirectory может быть чем-то другим, если необходимо:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   
6 голосов
/ 23 марта 2009

Насколько я понимаю, вы должны использовать BaseDirectory. CurrentDirectory может измениться в процессе выполнения программы.

3 голосов
/ 23 июля 2013

В тестовых проектах Visual Studio 2010, если вы включаете параметр развертывания Редактировать параметры теста, AppDomain.CurrentDomain.BaseDirectory указывает на папку TestResults \ Out (не bin \ debug). Хотя по умолчанию для папки bin задана папка debug.

Здесь я нашел убедительный ответ.

Почему AppDomain.CurrentDomain.BaseDirectory не содержит «bin» в приложении asp.net?

2 голосов
/ 02 сентября 2016

Я также прошел через несколько дней назад, так как использовал

Environment.CurrentDirectory

, поскольку это вызывало проблемы на рабочем сервере, но нормально работало с моим локальным сервером,

Итак, я попробовал с

System.AppDomain.CurrentDomain.BaseDirectory;

И это сработало для меня в обеих средах.

Итак, как все они сказали, мы всегда должны идти с

System.AppDomain.CurrentDomain.BaseDirectory;

, поскольку проверяет каталог текущего домена на наличие пути.

ищите больше информации

Не удалось найти часть ошибки пути на сервере

2 голосов
/ 23 марта 2009

Я обычно использую что-то вроде:

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...