Hoy estoy escribiendo mi primera página de afeitar, no puedo entender cómo ingresar #if debug #else #endif
¿Como puedo ingresar el preprocesador en la maquinilla de afeitar?
Hoy estoy escribiendo mi primera página de afeitar, no puedo entender cómo ingresar #if debug #else #endif
¿Como puedo ingresar el preprocesador en la maquinilla de afeitar?
#if debug
afeitarse, pero siempre será cierto. Entonces, la respuesta a su pregunta es que no tiene sentido hacerlo, ya que Razor siempre compilará en modo de depuración.Respuestas:
Acabo de crear un método de extensión:
Luego lo usé en mis puntos de vista así:
Como el ayudante se compila con el símbolo DEPURACIÓN / LIBERACIÓN, funciona.
fuente
public static bool IsDebug(...){ return true; }
, y viceversa para el modo sin DEPURACIÓN.Esto está integrado en
HttpContext
:En mi opinión, esto tiene más sentido que la compilación condicional para vistas y es útil para algunos escenarios de prueba. (Vea el comentario de Tony Wall a continuación).
Nota al margen:
NullReferenceException
paraHttpContext.Current
Alex Angas mencionó que obtienen un
NullReferenceException
solución con esta solución, y algunas personas han votado a favor indicando que esto puede no ser un evento aislado.Mi mejor suposición:
HttpContext.Current
se almacena enCallContext
, lo que significa que solo es accesible por el hilo que maneja la solicitud HTTP entrante. Si sus vistas se representan en un hilo diferente (¿quizás algunas soluciones para vistas precompiladas?) Obtendría unnull
valor paraHttpContext.Current
.Si recibe este error, avíseme en los comentarios y mencione si está utilizando vistas precompiladas o cualquier configuración especial que pueda dar como resultado que sus vistas se procesen / ejecuten parcialmente en otro hilo.
fuente
System.Web
Creé un proyecto en .NET 4.5.1 (ASP.NET MVC 5, versión 4.0.0.0), e incluso con eldebug
atributo (o, de hecho, todo elcompilation
elemento) eliminado, no obtengo una excepción. Mi siguiente La mejor hipótesis es que este es un error que se corrigió en versiones posteriores delSystem.Web
ensamblaje o que hay algo diferente sobre su situación específica de lo que no estoy al tanto. ¿Podría crear un proyecto de prueba mínimo y subirlo a algún lugar?C # y ASP.NET MVC: uso de la directiva #if en una vista
En realidad esa respuesta tiene la respuesta correcta. Tendrá que aprobar si está o no en modo de depuración a través del Modelo. (o ViewBag) ya que todas las vistas se compilan en modo de depuración.
fuente
// your debug stuff
Sé que esta no es una respuesta directa a la pregunta, pero como estoy bastante seguro de que la configuración de depuración es el corolario del hecho de que realmente se está ejecutando localmente, siempre puede usar la
Request.IsLocal
propiedad como una prueba de depuración. Así:fuente
Mi solución es muy estúpida, pero funciona. Defina una constante global en algún lugar de un archivo estático:
Luego úsalo con Razor en HTML:
fuente
Por defecto, las vistas 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 IF DEBUG, debe:
cambie el siguiente atributo de falso a verdadero
vuelva a cargar su proyecto y luego se compilarán las vistas.
La única otra solución sería tener una función en su código detrás
y luego llamarlo desde la vista:
fuente
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.
fuente
Esto funciona para mí en un proyecto de marca blanca .net core 3.0
fuente
En .NET Core, puede hacer lo siguiente en lugar de verificar las variables del preprocesador:
fuente