visual variable tag studio directivas define debug c# .net compiler-construction debugging

tag - variable debug c#



¿Funcionará#if RELEASE como#if DEBUG en C#? (10)

En todos los ejemplos que he visto de la directiva del compilador #if, usan "DEBUG". ¿Puedo usar "RELEASE" de la misma manera para excluir el código que no deseo ejecutar cuando se compila en modo de depuración? El código que quiero rodear con este bloque envía un montón de correos electrónicos, y no quiero enviarlos accidentalmente al realizar la prueba.


"Pop Catalin" lo hizo bien. El control de la definición basada en el tipo de construcción proporciona una gran flexibilidad. Por ejemplo, puede tener una configuración "DEBUG", "DEMO" y "RELEASE" en la misma solución. Eso evita la necesidad de programación duplicada con dos soluciones diferentes.

Así que sí, #if RELEASE o #if (RELEASE) funciona de la misma manera que #if DEBUG cuando se define el símbolo de compilación condicional de RELEASE.

Lo siguiente se tomó de la publicación "Pop Catalin": Si desea definir una constante LIBERACIÓN para la configuración de la versión, vaya a: * Propiedades del proyecto -> Generar * Seleccione Modo de liberación * en el cuadro de texto de símbolos de compilación Condicional ingrese: LIBERAR


En mi instalación de VS (VS 2008) la versión #if no funciona. Sin embargo, usted podría simplemente utilizar! DEBUG

Ejemplo:

#if !DEBUG SendTediousEmail() #endif


No

Mientras que en la configuración de depuración hay una constante definida DEBUG (definida automáticamente por Visual Studio), mientras que no existe una constante definida para el modo de lanzamiento. Compruebe la configuración de su proyecto en construcción.

Seleccionar [Definir constante DEBUG] en Proyecto -> Crear es como incluir #define DEBUG al principio de cada archivo.

Si desea definir una constante LIBERACIÓN para la configuración de la versión, vaya a:

  • Propiedades del proyecto -> Construir
  • Seleccione el modo de liberación
  • en el cuadro de texto Símbolos de compilación condicional, ingrese: LIBERAR

No, no lo hará, a menos que hagas un trabajo.

La parte importante aquí es lo que realmente es DEBUG, y es una especie de constante definida con la que el compilador puede verificar.

Si verifica las propiedades del proyecto, en la pestaña Generar, encontrará tres cosas:

  • Un cuadro de texto llamado "Símbolos de compilación condicional"
  • Una casilla de verificación etiquetada como "Definir constante DEBUG"
  • Una casilla de verificación etiquetada como "Definir constante de rastreo"

No existe tal casilla de verificación, ni constante / símbolo predefinido que tenga el nombre LIBERAR.

Sin embargo, puede agregar fácilmente ese nombre al cuadro de texto etiquetado como Símbolos de compilación condicional, pero asegúrese de establecer la configuración del proyecto en modo Liberación antes de hacerlo, ya que estas configuraciones son por configuración.

Básicamente, a menos que agregue eso al cuadro de texto, #if RELEASE no producirá ningún código bajo ninguna configuración.

Edición : Corregido #ifdef a #if (gracias Daniel)


Nunca he visto eso antes ... pero he visto:

#if (DEBUG == FALSE)

y

#if (!DEBUG)

Que trabajo para ti?


Puede utilizar #if (! DEBUG) para estos fines.


Sé que esta es una pregunta antigua, pero puede valer la pena mencionar que puede crear sus propias configuraciones fuera de DEBUG y RELEASE, como TEST o UAT.

Si luego, en la pestaña Generar de la página de propiedades del proyecto, establece los "Símbolos de compilación condicional" en PRUEBA (por ejemplo), puede usar una construcción como

#if (DEBUG || TEST ) //Code that will not be executed in RELEASE or UAT #endif

Puede usar esta construcción por razones específicas, como clientes diferentes, si tiene la necesidad, o incluso Métodos web completos, por ejemplo. También hemos utilizado esto en el pasado, donde algunos comandos han causado problemas en un hardware específico, por lo que tenemos una configuración para una aplicación cuando se implementa en el hardware X.


Solo una nota. Estoy bastante seguro de que #if DEBUG se elimina de las compilaciones de lanzamiento cuando la compilación optimizada está habilitada.


porque no solo

#if RELEASE #undef DEBUG #endif


RELEASE no está definido, pero puede usar

#if (!DEBUG) ... #endif