Как получить физическое местоположение веб-приложения ASP.NET без использования HttpContext.Current? - PullRequest
6 голосов
/ 12 июня 2010

Я обнаружил, что мне необходимо настроить log4net на основе файла относительно физического расположения запущенного веб-приложения ASP.NET.Нам нравится запускать регистратор как можно раньше, поэтому Application_Start кажется подходящим местом.В IIS6 это работает нормально и работает уже много лет, но теперь мы перешли на IIS7, и это больше не будет работать:

string absolutePath = HttpContext.Current.Request.PhysicalApplicationPath;

, потому что HttpContext.Current недоступен во многих global.asax (Приложение, сессия) события.Это старые новости, мы все знаем, что это поднимает печально известную Запрос недоступен в этом контексте ошибка .Мы не хотим возвращаться в классический режим.

Теперь вопрос прост: без использования HttpContext возможно ли найти физическое местоположение экземпляра веб-приложения, работающего в данный момент? *

Ответы [ 2 ]

14 голосов
/ 12 июня 2010

Попробуйте HttpRuntime.AppDomainAppPath .Для получения дополнительной информации прочитайте IIS7 Интегрированный режим: в этом контексте исключение для запроса в Application_Start , опубликованном Майком Володарским, недоступно.

0 голосов
/ 14 июня 2010

В качестве альтернативного ответа на мой собственный вопрос, я хотел бы добавить, что Server.MapPath() работает и во время события Application_Start.В этом случае путь к домену приложения будет равен Server.MapPath("~"), но он удобнее для сопоставления относительных путей, что устраняет бремя конкатенации (для чего предназначался MapPath).

...