Я имел требование настраивать log4net на основе файла относительно физического местоположения под управлением веб-приложения ASP.NET. Нам нравится запускать регистратор как можно раньше, таким образом, Application_Start
кажется надлежащим местом. В IIS6 это хорошо работает и работало целую вечность, но теперь мы переместились в IIS7, и это не будет больше работать:
string absolutePath = HttpContext.Current.Request.PhysicalApplicationPath;
потому что HttpContext. Текущий не доступно во многих global.asax
(Приложение, Сессия) события. Это - старые новости, все мы знаем, что они повышают теперь печально известный Запрос, не доступно по этой ошибке контекста. Мы не хотим пятиться к Классическому Режиму.
Теперь, вопрос прост: без использования HttpContext
, действительно ли возможно найти физическое местоположение в настоящее время рабочего экземпляра веб-приложения?
Try HttpRuntime.AppDomainAppPath. Для получения дополнительной информации читайте Интегрированный режим IIS7: Request is not available in this context exception in Application_Start posted by Mike Volodarsky.
В качестве альтернативного ответа на свой вопрос я хотел бы добавить, что Server.MapPath ()
также работает во время события Application_Start
. Тогда путь к домену приложения будет равен Server.MapPath ("~")
, но он удобнее для отображения относительных путей, снимая бремя конкатенации (для чего изначально был предназначен MapPath).