tag net mvc for asp asp.net-mvc razor preprocessor

asp.net mvc - net - Razor view engine, cómo ingresar al preprocesador(#if debug)



razor mvc (6)

Estoy escribiendo mi primera página de afeitar hoy, no puedo averiguar cómo ingresar #if debug #else #endif

¿Cómo puedo introducir el preprocesador en la maquinilla de afeitar?


Acabo de crear un método de extensión:

public static bool IsDebug(this HtmlHelper htmlHelper) { #if DEBUG return true; #else return false; #endif }

Entonces lo usé en mis puntos de vista así:

<section id="sidebar"> @Html.Partial("_Connect") @if (!Html.IsDebug()) { @Html.Partial("_Ads") } <hr /> @RenderSection("Sidebar", required: false) </section>

Dado que el ayudante está compilado con el símbolo DEBUG / RELEASE, funciona.


Esto está integrado en HttpContext :

@if (HttpContext.Current.IsDebuggingEnabled) { // Means that debug="true" in Web.config }

En mi opinión, esto tiene más sentido que la compilación condicional para vistas y es útil para algunos escenarios de prueba. (Ver el comentario del Jefe de Código abajo.)

Nota al NullReferenceException : NullReferenceException para HttpContext.Current

Alex Angas mencionó que obtuvieron una NullReferenceException con esta solución, y algunas personas han votado de manera ascendente, lo que indica que esto puede no ser un evento aislado.

Mi mejor conjetura: HttpContext.Current se almacena en CallContext , lo que significa que solo es accesible por el hilo que maneja la solicitud HTTP entrante. Si sus vistas se representan en un subproceso diferente (¿quizás algunas soluciones para vistas precompiladas?) Obtendría un valor null para HttpContext.Current .

Si recibe este error, hágamelo saber en los comentarios y mencione si está utilizando vistas precompiladas o cualquier configuración especial que podría resultar en que sus vistas se rendericen / ejecuten parcialmente en otro hilo.


Para mí, el siguiente código ha funcionado muy bien.

Cuando la aplicación está Depurando , aparecen mis botones, cuando es Release , no lo hacen.

@if (this.Context.IsDebuggingEnabled) { <button type="button" class="btn btn-warning">Fill file</button> <button type="button" class="btn btn-info">Export file</button> }


Por defecto, las vistas de MVC no se compilan, por lo que #IF DEBUG no puede funcionar en una vista. Si desea compilar la vista para acceder a la configuración de IF DEBUG, necesita:

  1. Haga clic derecho en su proyecto en Visual Studio
  2. Descargar proyecto
  3. Editar proyecto

cambia el siguiente atributo de falso a verdadero

<MvcBuildViews>true</MvcBuildViews>

Vuelve a cargar tu proyecto y luego las vistas serán compiladas.

El único trabajo alternativo sería tener una función en su código detrás

public static Boolean DEBUG(this System.Web.Mvc.WebViewPage page) { var value = false; #if(DEBUG) value=true; #endif return value; }

y luego llamarlo desde la vista:

if(DEBUG()) { //debug code here } else { //release code here }


Sé que esta no es una respuesta directa a la pregunta, pero como estoy bastante seguro de que la configuración de la depuración es un corolario al hecho de que en realidad se está ejecutando localmente, siempre puede usar la propiedad Request.IsLocal como una prueba similar a la de la depuración. Así:

@if (Request.IsLocal) { <link rel="stylesheet" type="text/css" href="~/css/compiled/complete.css"> } else { <link rel="stylesheet" type="text/css" href="~/css/compiled/complete.min.css"> }