У меня есть этот код для загрузки файла конфигурации и чтения всех значений, и он отлично работает при запуске приложения, но, конечно, не работает в городе команды, потому что базовый каталог appdomain - это то, где запущена сборка script (psake). Я знаю, что я могу сменить каталог в dir build перед выполнением тестов, но я подумал, что лучше делать загрузку файла конфигурации в любое время независимо.
XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, cfgFile));
Есть ли другой способ получить "BaseDirectory", который действительно работает все время? Я пробовал и ниже, и с теми же результатами:
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
XDocument.Load(Path.Combine(path, cfgFile));
РЕДАКТИРОВАТЬ 1 Проблема заключается в следующем. Мой базовый каталог решений - "C:\Project", все скомпилированные файлы копируются в "C:\Project\build". Теперь в сборке psake script у меня есть следующий код:
task Test -depends PrepareTests {
try {
#$old = pwd
#cd $build_dir
&$mspec $mspec_projects --teamcity
#cd $old
}
catch {
&echo "Error starting test runner"
Exit 1;
}
}
Как вы можете видеть, я прокомментировал изменение каталогов, что делает BaseDirectory местом сборки файла/решения вместо каталога сборки независимо от того, как я пытаюсь получить к нему доступ. Какой-то запутанный, если вы спросите меня.
UPDATE Мне очень нравится знать, можно ли получить каталог сборки независимо от того, в какой директории находится приложение, которое запустило домен приложения. Как?