Averiguar el valor del "compilation debug"

Ya hemos hablado de la importancia del gente a la que no le hace mucha gracia ni jugar con el machine.config ni con el deploymente retail. De hecho, es bastante habitual no tener acceso al machine.config (sobre todo en servidores compartidos).

De forma que lo que queremos es asegurarnos de que siempre que no no nos encontremos en desarrollo (es decir que estemos en localhost) nuestro debug sea false.

Pues ahí va el código autoexplicativo:

    /// <summary>
    /// Define si se puede tener activado el debug
    /// </summary>
    protected bool CanDebug()
    {
        if (!Request.Url.DnsSafeHost.Equals("localhost"))
        {
            // Si no estoy en localhost...

            // Cogemos el elemento system/compiltation, donde se encuentra el atributo "debug"
            System.Configuration.ConfigurationSection section =
                System.Configuration.ConfigurationManager.GetSection("system.web/compilation") as
                System.Configuration.ConfigurationSection;

            if (section == null)
            {
                // En caso de no existir, el valor por defecto es debug = false
                return true;
            }
            else
            {
                // En caso de existir la sección y su atributo "debug", debemos asegurarnos de que sea false
                return !Convert.ToBoolean(section.ElementInformation.Properties["debug"].Value);
            }
        }
        else
        {
            // Si estoy en localhost puedo tener el debug como quiera.
            return true;
        }
    }


De este modo averiguaremos si nuestro valor de "debug" es el correcto, tanto si estamos en localhost como si no.

El modo de esar esta información queda a gusto de cada uno, pero una opción "bestia" sería la de poner este código en algún lugar que seguro vayamos a visitar:

        if (!CanDebug())
            throw new Exception("No se puede tener activado el debug");