c# - referencia - directiva#if preprocesador para directivas distintas de DEBUG
referencia de c# microsoft (4)
Sé que puedo usar las directivas del preprocesador para verificar la depuración / liberación haciendo esto:
#if DEBUG
//debug mode
#elif
//release mode
#endif
pero ¿qué pasa con la comprobación de otras configuraciones, como Test. En VB puedes hacer esto:
#If CONFIG = "Release" Then
''Release mode
#ElseIf CONFIG = "Test" Then
''Test mode
#ElseIf CONFIG = "Debug" Then
''Debug mode
#End If
Entonces, mi pregunta está en C #, ¿cómo puedo verificar el modo de prueba? Tengo algún código que quiero ejecutar si estoy en Depuración Y prueba, pero no en el modo Liberación, así que específicamente, necesito una forma de verificar que no esté en el modo Liberación. En VB haría esto:
#If Not CONFIG = "Release" Then
''Do something here for every configuration that is not Release
#End If
Es lo mismo que para DEBUG, asumiendo que ha definido una configuración de compilación que enumera la TEST
en el cuadro de texto "Símbolos de compilación condicional" (en propiedades del proyecto> pestaña Generar; esta es una lista delimitada por espacios).
Para el código que solo desea ejecutar en la configuración de compilación TEST:
#if TEST
// ...
#endif
Y para el código que no desea ejecutar en la configuración de compilación TEST, puede #else
lo anterior, o hacer esto:
#if !TEST
// ...
#endif
Haga clic con el botón derecho en el nombre del proyecto [nombre del proyecto] que desea usar la directiva de precompilador personalizada.
Vaya al elemento de propiedades y luego a la pestaña de compilación.
entonces necesitas agregar tu directiva personalizada allí en el cuadro de texto. Por ejemplo, he agregado ''Local'' como mi directiva personalizada, vea la imagen a continuación
Ahora puede usar la nueva directiva del compilador como se muestra a continuación en su (en C #)
#if **Local**
//TODO:Add your c# code here
#endif
Hay un par de maneras de manejar sus factorings. En mi mundo, utilizamos cuatro técnicas primarias:
- banderas del compilador (
#if
) - clases parciales
- implementaciones separadas
- Decisiones de tiempo de ejecución
Así, por ejemplo, hemos creado configuraciones para C # con código no administrado, C # con todo el código administrado, C # para Silverlight. En el proyecto no administrado de C # tenemos un símbolo de tiempo de compilación UNMANAGED
, para C # hemos MANAGED
y para SILVERLIGHT
tenemos SILVERLIGHT
. Esto me permite inyectar pequeñas tareas en el código y compartir los mismos archivos en todos los proyectos. No es gran cosa.
Para las clases parciales, tenemos archivos .cs separados para cada proyecto que tienen implementaciones del código marginal. Esto se usa en los casos en que no pudimos hacer que esto funcionara al tener una clase abstracta como la clase primaria con la mayor parte de la implementación y luego el código marginal en clases concretas para cada objetivo. Esto funciona bastante bien.
Para implementaciones separadas, reconocemos que es poco lo que se puede compartir entre las bases de código y estamos mejor con un código separado. Esto no es ideal, pero que así sea.
Para verificaciones de tiempo de ejecución, es exactamente eso. En lugar de buscar DEBUG
en un #if
, se usa una verificación de tiempo de ejecución para que una configuración haga esa elección. A menos que tenga andamios de depuración terriblemente grandes, esta no es una mala elección ya que también le permite realizar la depuración de campos (pero es posible que tenga restricciones de entrega que lo impidan).
Personalmente, trato de evitar las banderas del compilador. Hacen el código más difícil de leer. Honestamente, sin embargo, hay momentos en que tienen sentido. Hemos tenido clases que no compilarían en Silverlight solo por la declaración de la clase (creo que fue ObservableCollection que no estaba disponible) y tuvimos que heredar de otra cosa. Todo lo demás funcionó bien.
Respuesta simple es
- Vaya a Proyecto -> [Nombre del proyecto] Propiedades-> Construir
- Establecer marcado [] Definir DEBUG
Ahora puedes jugar con la directiva predecesora DEBUG como
#if DEBUG
...
#else
...
#endif