如何在不使用HttpContext.Current的情况下获取ASP.NET Web应用程序的物理位置?
我发现自己需要根据相对于正在运行的ASP.NET Web应用程序的物理位置的文件来配置log4net。 我们希望尽早启动记录器,因此Application_Start
似乎是一个合适的位置。 在IIS6中,这工作正常并且已经运行了很长时间,但现在我们转移到IIS7,这将不再起作用:
string absolutePath = HttpContext.Current.Request.PhysicalApplicationPath;
因为HttpContext.Current在许多global.asax
(应用程序,会话)事件中不可用。 这是旧闻,我们都知道它引发了现在臭名昭着的请求在此上下文错误中不可用 。 我们不想回到经典模式。
现在,问题很简单:不使用HttpContext
,是否可以找到当前运行的Web应用程序实例的物理位置?
尝试HttpRuntime.AppDomainAppPath 。 有关详细信息,请阅读IIS7集成模式: Mike Volodarsky发布的Application_Start中的此上下文exception中的请求不可用 。
作为我自己的问题的替代答案,我想补充说Server.MapPath()
也在Application_Start
事件期间工作。 然后,应用程序域路径将等于Server.MapPath("~")
,但它对于映射相对路径更加方便,从而消除了连接的负担(MapPath的开头意味着什么)。