2008-12-18 7 views
32

¿Puedo hacer algo como esto en el marcado de una página asp.net, basado en la configuración "Definir constante de DEPURACIÓN"?¿Hay un #IF DEPURACIÓN para el marcado de Asp.net?

#IF (DEBUG) THEN 
    <asp:TextBox ID="TextBox1" runat="server">You're in debug mode</asp:TextBox> 
#END IF 
+1

La respuesta incorrecta se estableció como la correcta. –

Respuesta

6

El más cerca que puedo conseguir es:

<asp:Literal id="isDebug" runat="server" /> 
<script runat="server"> 
    void Page_Load() 
    { 
#if DEBUG 
     isDebug.Text = "You're in debug mode"; 
#endif 
    } 
</script> 

Esto le dará problemas si se quería tener nada más en su Load (evento); el código literal anterior solo funciona si la página/control no tiene código.

Si tuviera que hacer esto, encapsularía el código anterior en un control de usuario e incluiría ese control en las páginas de interés.

Mi control de usuario de prueba es el siguiente:

<%@ Control Language="C#" AutoEventWireup="true" %> 
<asp:Literal id="isDebug" runat="server" /> 
<script runat="server">  
    void Page_Load()  
    { 
#if DEBUG   
     isDebug.Text = "You're in debug mode"; 
#endif  
    } 
</script> 
-1

Sería bastante fácil de hacer las suyas. Es posible que se pierda algunas de las características más frescas de Compilation Constants que no compilan, pero definitivamente podría agregar marcas en función de un parámetro global de algún tipo.

0

¿Qué le parece usar un Literal y luego usar #if DEBUG en su código subyacente para inyectar html para su cuadro de texto en el literal? También hay bloques de código directo en ASP.NET, pero no sé si se refieren a las sentencias #if; esos parecen estar reservados para el compilador de C#.

56
<form runat="server"> 
<% #if DEBUG %> 
<asp:TextBox ID="TextBox1" runat="server">You're in debug mode</asp:TextBox> 
<% #else %> 
<asp:TextBox ID="TextBox2" runat="server">Mmm... No, I think you're not in debug mode</asp:TextBox> 
<% #endif %> 
</form> 

Tenga en cuenta que no se puede asignar el mismo identificador de esos cuadros de texto.

También tenga en cuenta que DEBUG es cierto cuando se ajusta por lo que en web.config:

<compilation debug="true"> 
+0

¿hay alguna manera de configurar la depuración de forma automática como verdadera durante la depuración y viceversa? – Guy

+3

@Guy 'DEBUG' indica si está utilizando o no una compilación de depuración (a diferencia de una compilación de versión/otros). Creo que lo que quieres es 'Debugger.IsAttached' o' HttpContext.Current.IsDebuggingEnabled' - Será verdadero si se lanza desde VS, de lo contrario será falso (a menos que conectes manualmente un depurador por supuesto) – Basic

+1

Desde mi experiencia esto funciona solo si ha declarado en el encabezado de su archivo ASPX o ACX '<% @ CompilerOptions =" ​​/ d: DEBUG "%>'. Pero luego no cambia automáticamente cuando pasa de la depuración a la versión. ** Nota ** puede definir múltiples variables de esta manera si las separa con punto y coma, p. Ej. '<% @ CompilerOptions =" ​​/ d: myVar1; myVar2 "%>'. Cada uno de estos se puede verificar utilizando una declaración '<% #if myVar%>'. – Matt

6

Si usted está tratando de pasar a través de Javascript o prefieren minify JavaScript cuando no se depura, prefiero este enfoque:

<% if (Debugger.IsAttached) { %> 

    <script src="jquery.js"></script> 

<% } else { %> 

    <script src="jquery.min.js"></script> 

<% } %> 

Puedo pasar fácilmente por el código cuando estoy depurando, de lo contrario quiero que los scripts se minimicen. Asegúrese de incluir la siguiente importación:

<%@ Import Namespace="System.Diagnostics" %> 

Además, es agradable de usar la extensión de Visual Studio Web Essentials para agrupar/minify sus archivos javascript por lo que sólo hay una petición al servidor para las secuencias de comandos.

Cuestiones relacionadas