Должен ли я использовать AppDomain.CurrentDomain.BaseDirectory или System.Environment.CurrentDirectory?
У меня есть два файла exe в одной папке, я могу запустить exe2 с помощью кнопки в exe1. Сегодня я наблюдал за клиентом по сеансу удаленных (терминальных служб), и exe2 не смог запустить ошибку "Файл не найден", но exe1 находился в том же каталоге, когда мы проверили. Поэтому я должен использовать AppDomain.CurrentDomain.BaseDirectory или System.Environment.CurrentDirectory?
Спасибо
Ответы
Ответ 1
Если вы хотите найти файлы в том же каталоге, что и ваше приложение, AppDomain.CurrentDomain.BaseDirectory
- правильный выбор.
Environment.CurrentDirectory
- это значение, которое может и будет изменяться в ходе выполнения вашего приложения. Например, используя параметры по умолчанию, OpenFileDialog в WinForms изменит это значение на каталог, в котором был выбран файл.
Ответ 2
AppDomain.CurrentDomain.BaseDirectory
возвращает каталог, из которого был загружен текущий домен приложения.
System.Environment.CurrentDirectory
возвращает текущий системный каталог.
В вашем случае AppDomain.CurrentDomain.BaseDirectory
является лучшим решением.
Ответ 3
Вы должны использовать AppDomain.CurrentDomain.BaseDirectory
.
Например, в приложении служб Windows:
System.Environment.CurrentDirectory
вернет C:\Windows\system32
Пока
AppDomain.CurrentDomain.BaseDirectory
вернет [Application.exe location]
Еще один важный фактор, который следует учитывать, заключается в том, что AppDomain.CurrentDomain.BaseDirectory
является свойством readonly, а Environment.CurrentDirectory
может быть чем-то еще при необходимости:
// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
Ответ 4
Как я понимаю, вы должны использовать BaseDirectory
. CurrentDirectory
может меняться в ходе выполнения программы.
Ответ 5
В тестовых проектах Visual Studio 2010, если вы включите опцию развертывания параметров редактирования теста, AppDomain.CurrentDomain.BaseDirectory указывает на папку TestResults\Out (не bin\debug).
Хотя, установка по умолчанию указывает на папку bin\debug.
Здесь я нашел убедительный ответ.
Почему AppDomain.CurrentDomain.BaseDirectory не содержит "bin" в приложении asp.net?
Ответ 6
Я обычно использую что-то вроде:
string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
AppPath = AppPath.Replace("file:\\", "");
Ответ 7
Я также прошел через это несколько дней назад, когда я использовал
Environment.CurrentDirectory
поскольку это давало мне проблему на рабочем сервере, но отлично работало с моим локальным сервером,
Итак, я пробовал с помощью
System.AppDomain.CurrentDomain.BaseDirectory;
И он работал у меня как в среде.
Итак, поскольку все они сказали, что мы всегда должны идти с
System.AppDomain.CurrentDomain.BaseDirectory;
поскольку он проверяет каталог текущего домена для пути.
искать дополнительную информацию
Не удалось найти часть ошибки пути на сервере