2011-12-14 10 views
5

Necesito agregar algo de registro a mi aplicación, y debe estar en modo de lanzamiento, y necesito asegurarme de que el código de registro no se esté ejecutando en producción. Por lo tanto, me gustaría utilizar #define y #if para asegurarme de que las instrucciones de registro se eliminen cuando paso a la producción.¿Puedo establecer una directiva de preprocesador C# desde un archivo central?

El problema es que necesito el registro en varios archivos, y me cuesta poner un #define en la parte superior de cada archivo. ¿Hay alguna manera de tener un #define centralizado? De esa manera puedo eliminar el #define único en lugar de un #define de todos los archivos (lo que significa que casi seguro me olvidaré de uno).

+0

Puede ser mejor utilizando la inyección de dependencia para usar la clase de registrador vacía en la producción sobre la compilación condicional. Tener diferentes versiones de binarios entre las pruebas finales y la producción no es lo mejor ... –

Respuesta

9

En la línea de comando, use el interruptor /define. En Visual Studio, elija la pestaña "Generar" desde la página de propiedades para el proyecto y complete la sección "Símbolos de compilación condicional".

Considere también en lugar de utilizar la compilación condicional, en lugar de hacer que sus métodos de registro sean métodos condicional. Esa es una alternativa de aspecto más agradable. Así es como funciona Debug.Assert; es un método condicional, por lo que si el símbolo del preprocesador de depuración no está definido, el compilador simplemente elimina todas las llamadas al método antes de la generación del código.

Véase también mi artículo sobre el tema:

http://ericlippert.com/2009/09/10/whats-the-difference-between-conditional-compilation-and-the-conditional-attribute/

+0

Sabía de Debug.Afirma, pero no me di cuenta de que podrías crear esos métodos condicionales tú mismo. Esa es una solución mucho mejor, ¡gracias! –

1

Sí, normalmente esto se hace en su archivo de compilación o en el script que usa y crea su compilación. Lo especifica como argumentos de línea de comandos al MSBuild.

1

Para añadir a la respuesta de Dave, los símbolos globales de compilación condicional también se pueden especificar en Visual.

  1. Haga clic derecho en su proyecto y vaya a Propiedades
  2. Ir a la ficha Generar

Puede especificar los símbolos que le gusten (DEBUG ya está activado de forma predeterminada para configuraciones de depuración, por lo tanto, esto realmente podría darle lo que desea ya) para la configuración dada, o seleccione "Todas las configuraciones" en la parte superior para especificar ciertos símbolos para todas las configuraciones.

1

¿Estás usando Visual Studio? En la página de propiedades del proyecto, en la pestaña "Crear", hay un cuadro de texto "Símbolos de compilación condicional".

1

Llame al registro donde quiera.

Definir los métodos de entrada de registro de API con

[Conditional ("DEBUG")] 
public void WriteDebugMessage(...) 

Construir el programa en modo de depuración (que, por defecto, define 'debug' en VS). Estas llamadas serán parte de su asamblea.

Cree su programa en modo de lanzamiento (o - elimine el símbolo DEPURAR de la definición de compilación). Estas llamadas ahora no tienen sentido y no se ejecutarán.

Parece que es lo que quieres?

Cuestiones relacionadas