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