Hoy quería saber cómo condicionar cierto código en un sitio web o aplicación web, según si está o no la depuración activa.
Para ello, he empezado leyendo este post
http://www.west-wind.com/Weblog/posts/10228.aspx del que he sacado algunas ideas.
Básicamente tenemos disponibles los siguientes métodos y propiedades para detectar en tiempo de ejecución si nuestra aplicación está o no en modo depuración… que por cierto nunca en producción debería estar en depuración y si no te lo crees, léete esto y me dirás http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx
IsDebuggingEnabled
http://msdn.microsoft.com/en-us/library/system.web.httpcontext.isdebuggingenabled.aspx
Debugger.IsAttached
http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.isattached.aspx
IsDebuggingEnabled es simplemente un wrapper para no tener que leer directamente el valor desde el web.config con algo parecido a esto (que también nos valdría pero ya son ganas…)
Configuration.ConfigurationManager.GetSection('system.web/compilation').Debug
Debugger.IsAttached tampoco es definitivo porque no queremos saber si hay un depurador asociado al proceso (esto es que estamos depurando por ejemplo desde el IDE), sino si estamos en modo depuración.
Tanto en un sitio web como en una aplicación web y sin importar la configuración activa (esto es bien Debug para sitio web, bien Debug o Release para una aplicación web).
- · F5 + con debug=”true” en web.config
- IsDebuggingEnabled = True
- Debugger.IsAttached = True
- · Ctrl + F5 + con debug=”true” en web.config
- IsDebuggingEnabled = True
- Debugger.IsAttached = False
- · Ctrl + F5 + con debug=”false” en web.config
- IsDebuggingEnabled = False
- Debugger.IsAttached = False
De lo anterior se deduce que la propiedad que nos interesa es IsDebuggingEnabled, así que:
If Context.IsDebuggingEnabled Then
' modo de depuración activo
Else
' modo de depuración no activo
End If
Sólo nos queda hablar de #If DEBUG, pero la verdad es que no hay mucho que hablar puesto que en VB no funciona, pero si en C#... y sólo mencionar que en C# no importa cuál sea el valor de debug en el web.config, puesto que se guía exclusivamente por la versión de configuración activa (Debug o Release).
Y un último apunte es que si te fijas, aún cuando compilas en modo Release, se generan ficheros .pdb y entonces ¿los puedo quitar? ¿Está bien que los quite? Yo personalmente los voy a quitar, pero literatura al respecto y mil discusiones hay por internet:
http://forums.asp.net/p/1539298/3745787.aspx
http://gchandra.wordpress.com/2008/02/22/disable-pdp-file-generation-in-release-mode/
http://geekswithblogs.net/SudheersBlog/archive/2006/09/22/92054.aspx
Un saludo!
No hay comentarios:
Publicar un comentario