HttpContext no funciona en global.asax.cs

Tengo este código en el global.asax.cs

protected void Application_Start(object sender, EventArgs e) { string logFile = HttpContext.Current.Request.PhysicalApplicationPath + "log4net.config"; } 

Funciona bien en .NET 4.0, pero lanza la siguiente excepción cuando se usa en .NET 4.5.

La solicitud no está disponible en este contexto.

El error parece bastante claro: el objeto de Request no está disponible en ese evento.

Tratar

 HttpRuntime.AppDomainAppPath 

o

 Server.MapPath(".") 

en lugar.

La respuesta es bastante simple. Primero, esto no está relacionado con la versión .NET, sino que está relacionado con la versión de IIS y el modo ASP.NET. El mensaje de error prácticamente lo dice todo: ya no se puede usar HttpContext en esa ubicación (de hecho, todavía no existe).

Esto se relaciona principalmente con los cambios que ocurrieron entre el modo clásico y el modo integrado (donde ASP.NET ya no es una dll ISAPI, sino que se integra en IIS en un nivel completamente diferente). Si recuerdo correctamente, HttpContext ahora solo existe mientras dure la solicitud, comenzando con BeginRequest y terminando con EndRequest o somesuch.

Si corresponde, puede cambiar la carpeta de su aplicación a un grupo de aplicaciones clásicas en IIS, pero no lo recomendaría, ya que el modo Integrado es mucho más atractivo. Solo use Classic para aplicaciones heredadas que no pueda actualizar.

Además, no debes usar PhysicalApplicationPath. Para eso es Server.MapPath , o en el caso de Application_start, HostingEnvironment.MapPath .

Así que usarías

 string logFile = HostingEnvironment.MapPath("~/log4net.config"); 

Para log4net, también puede usar el método regular para configurar su ubicación de configuración, como:

[ensamblado: log4net.Config.XmlConfigurator (ConfigFile = “MyStandardLog4Net.config”, Watch = true)]