Как использовать относительный путь в XDocument.Load?
У меня есть XML файл с именем PageData.xml в папке App_Data. Я хочу заполнить XDocument этим файлом, используя XDocument.Load.
Если я поставлю полный физический путь, он будет работать, то есть:
XDocument vXDoc = XDocument.Load("/Work/Project/Web/100413 Dev/App_Data/PageData.xml");
... где "Работа" - это папка на моем диске C:.
Если я попробую относительный путь, как этот, я получаю DirectoryNotFoundException:
XDocument vXDoc = XDocument.Load("AppData/PageData.xml");
"Не удалось найти часть пути 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\AppData\PageData.xml'."
Это, очевидно, неправильно, но должен быть простой способ установить правильный относительный путь? Что я не замечаю? Ваша помощь приветствуется.
Ответы
Ответ 1
Есть несколько способов сделать это. Вы можете использовать Server.MapPath(), чтобы превратить виртуальный каталог в путь физического каталога:
XDocument xdoc = XDocument.Load(Server.MapPath("/App_Data/PageData.xml"));
Или вы можете использовать Request.PhysicalApplicationPath, например:
var path = Path.Combine(Request.PhysicalApplicationPath, "App_Data\\PageData.xml");
XDocument xdoc = XDocument.Load(path);
В любом случае проблема заключается в том, что текущий рабочий каталог рабочего процесса обычно не устанавливается в каталог приложения (это связано с тем, что рабочий каталог является общесистемным свойством, а один процесс может содержать несколько веб-сайтов), Дополнительная информация здесь.