2008-12-30 11 views
10

¿Hay alguna forma de acceder a la etiqueta <compilation /> en un archivo web.config?Accede mediante programación a la sección <compilation /> de un web.config?

Quiero comprobar si el "depuración" atributo se establece en " verdadera" en el archivo, pero me parece que no puede encontrar la manera de hacerlo. Intenté usar el WebConfigurationManager, pero eso no parece permitirme llegar a la sección <compilation />.

Actualización:

Sé que podría fácilmente con sólo cargar el archivo como un documento XML y utilizar XPath, pero yo estaba esperando ya había algo en el marco que hacer esto por mí. Parece que habría algo, ya que ya hay formas de obtener Configuración de la aplicación y Cadenas de conexión.

También he intentado usar el método WebConfigurationManager.GetSection() de varias maneras:

WebConfigurationManager.GetSection("compilation")// Name of the tag in the file 
WebConfigurationManager.GetSection("CompilationSection") // Name of the class that I'd expect would be returned by this method 
WebConfigurationManager.GetSection("system.web") // Parent tag of the 'compilation' tag 

Todos los métodos anteriores devuelven null. Asumo que hay una manera de llegar a esta sección de configuración ya que hay una clase que ya existe ('CompilationSection'), pero no puedo encontrar la manera de obtenerla.

+0

¿Le agrega su sección a 'configSections'? algo como: '

...' – cameron

Respuesta

25

Uso:

using System.Configuration; 
using System.Web.Configuration; 

...

CompilationSection configSection = 
      (CompilationSection) ConfigurationManager.GetSection("system.web/compilation"); 

A continuación, puede comprobar la propiedad configSection.Debug.

CONSEJO: si necesita saber cómo obtener un valor de un archivo de configuración, consulte el archivo machine.config en su carpeta \Windows\Microsoft.net\Framework\<version>\CONFIG. Allí se puede ver cómo se definen todos los manejadores de la sección de configuración. Una vez que conozca el nombre del controlador de configuración (en este caso, CompilationSection), puede buscarlo en .Net docs.

2

Después de todo, siempre puede cargar el archivo Web.config en un XmlDocument y utilizar una consulta XPath para averiguarlo.

XmlDocument doc = new XmlDocument(); 
doc.Load(Server.MapPath("~/Web.config"));  
doc.SelectSingleNode("/configuration/system.web/compilation/@debug"); 

Sin embargo, le sugiero que utilice el método Configuration.GetSection para la solución.

CompilationSection section = 
    Configuration.GetSection("system.web/compilation") as CompilationSection; 
bool debug = section != null && section.Debug; 
+0

Ah ... 18 segundos. – StingyJack

0

¿No puede cargar el archivo como un archivo XML normal y usar XPath para obtener los nodos?

0

Pruebe usar el método ConfigurationManager.GetSection.

22

La manera fácil de comprobar si se está ejecutando en modo de depuración es utilizar la propiedad HttpContext.IsDebuggingEnabled. Obtiene su respuesta del atributo de depuración del elemento de compilación, que es lo mismo que intentas hacer.

+0

Esta es la mejor respuesta para cuando tienes una instancia 'HttpContext' (es decir, cuando manejas una solicitud en un controlador), pero si necesitas hacerlo en otro lugar dentro de la aplicación, como' Global.asax' código, entonces la respuesta de @ MikeScott es lo que necesitará. –

1

Siempre puede comprobar la opción de depuración en el nivel del compilador encerrando el código con

#if (DEBUG) 

#endif 

en caso de que esa era la idea ...

+0

Este no es el indicador web.config, ya que se puede cambiar durante el tiempo de ejecución. Como usted escribió, esto es solo tiempo de compilación y, por lo tanto, depende del clima, uno hace una compilación DEBUG o RELEASE (compilación). Eso no es lo que se preguntó aquí. – Marc

1

Trate de usar:

HttpContext.Current.IsDebuggingEnabled 
Cuestiones relacionadas