20 votos

#DEBUG instrucciones de Preprocesador en la página ASPX

Estoy tratando de utilizar una directiva de preprocesador en una página ASPX, pero la página no reconocen. Se trata simplemente de algo que yo no pueda hacer?

Antecedentes: estoy tratando de incluir a la versión completa de jQuery en modo de DEPURACIÓN (para, así, a la depuración =) ), y el record de la versión para la liberación. He probado este, pero no estoy muy familiarizado con el ASPX <% sintaxis. Solo estoy fundamentalmente de la incomprensión de lo que esta sintaxis no?

<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>

13voto

Badjer Puntos 403

Interesante diferencia aquí - usando #si de DEPURACIÓN en la página aspx tira de la etiqueta en la web.config, pero cuando se utiliza en el código-detrás, tira de DEPURACIÓN de la constante de la configuración de compilación en el archivo de proyecto. Así que en realidad son el acceso a dos diferentes configuraciones.

Por lo tanto, como lo que puedo decir, esto no es realmente posible.

6voto

Hannes Nel Puntos 332

Un mejor enfoque puede ser la utilización de un servidor de código para incluir el script. Me gustaría usar algo como

protected void Page_Load(object sender, EventArgs e)
{
#if DEBUG    
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    #else
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    #endif
}

2voto

pingo Puntos 55

Para mí la solución más elegante sería simplemente definir un campo en el código-detrás con las directivas de preprocesador y, a continuación, comprobar su valor a partir de la página aspx.

En el código-detrás:

public partial class WebClient : System.Web.UI.Page
{        
#if DEBUG 
    public bool DebugMode = true;
#else
    public bool DebugMode = false;
#endif
}

Página Aspx:

<%if(this.DebugMode){%>
    <script type="text/javascript" src="resources/jquery-1.3.2.js" />
<%}%>
<%else{%>
    <script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<%}%>

1voto

RickNZ Puntos 12053

He probado tu código y funcionó muy bien para mí. Yo habilitado o deshabilitado de DEPURACIÓN del sistema.web/compilación de sección en la web.config, que se ejecuta como un sitio web (no de prueba como una aplicación web; podría ser diferente...).

A ver lo que hace, poner intencional error de sintaxis en la página, y tratar de ejecutarlo con el modo de depuración activado. El compilador generará un enlace en la página de error que te permitirá ver el código fuente.

Sugerencia: el pre-procesador de directivas se inserta en la salida.

Line 218:     #if DEBUG 
Line 219:              
Line 220:              #line default
Line 221:              #line hidden
Line 222:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.js\" />\r\n");
Line 223:              
Line 224:              #line 14 "F:\Test\test.aspx"
Line 225:     #else 
Line 226:              
Line 227:              #line default
Line 228:              #line hidden
Line 229:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.min.js\" />\r\n");
Line 230:              
Line 231:              #line 16 "F:\Test\test.aspx"
Line 232:     #endif

Por supuesto, hay otros (mejor) formas de hacer lo que está después de...

0voto

Syam Puntos 1173

Traté de lograr esto muchas formas a lo largo de los años sin ningún éxito. Después de jugar con asp.net mvc recientemente tengo esta idea. Hay otra posibilidad para mantener todo en página aspx uso no válido de los tipos MIME. En asp.net MVC, las plantillas están cargados con inválida MIME tipos, de manera que el navegador no las analiza. He seguido el mismo patrón aquí; Wola! El éxito... Se necesita una función estática que le da fácil acceso a la depuración de la restricción.

<script src='<%= Page.ResolveUrl("~/Scripts/jquery-1.5.2.min.js") %>' 
    **type='<%=if(Ops.IsRelease(),"text/javascript","HideMin")%>'**></script> 

Ops.IsRelease() Public Static Función que devuelve la depuración constaraint

    Public Shared Function IsRelease() As Boolean
        Dim [release] = False
#If Not debug Then
        [release]=True
#End If
        Return [release]
    End Function

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: