2011-04-26 19 views
11

Soy un recién llegado a C# y encuentro un problema al compilar un proyecto de C#. Se trata del registro de depuración en los modos de depuración y liberación. Quiero que se llame a la función de registro en modo Debug, pero no se llama en modo Release, teniendo en cuenta el rendimiento. que conozco en C/C++, esto es fácil de hacer:¿Cómo hacer una compilación diferente entre Debug y Release?

// this is C/C++ sample, not C# 
#ifdef DEBUG 
#define DebugLog(CString,__VA_ARGS__) LogFunction(CString,__VA_ARGS__) 
#else 
#define DebugLog 
#endif 

En el anterior código C/C++, el DebugLog() se compila y se llama en modo de depuración, pero no compilado o llamada en modo de lanzamiento , por lo que el rendimiento se puede garantizar.

¿Hay alguna forma en C# que funcione como los códigos C/C++ anteriores?

+0

Tal vez podría echar un vistazo a esto: http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx –

Respuesta

13

El equivalente es el atributo [Condicional] en un método. De esta manera:

[Conditional("DEBUG")] 
public static void DebugLog(string fmt, params object[] args) { 
    // etc.. 
} 

En la versión de lanzamiento (con DEBUG no definido), tanto el método como las llamadas al método son eliminados por el compilador. Antes de reinventar esta rueda, asegúrese de revisar las clases Debug y Trace en .NET framework, ya lo hacen. Y tiene mucha flexibilidad para redirigir la información de depuración/rastreo.

+0

Gracias por las respuestas de todos ustedes. Creo que esto es lo que quiero, incluso no compilado en el modo de depuración. –

+0

Esto solo funciona si el tipo de devolución del método es nulo. Entonces no puedes decorar una acción MVC como esa. Terminé usando '#if DEBUG' –

14

En C# que puede hacer

#if DEBUG 
       //debug-mode only snippet go here. 
#endif 

Aquí está la reference documentation para la directiva #if.

2

Puede hacer lo mismo en C#. En las propiedades del proyecto, puede establecer un símbolo de compilación condicional como DEBUG. De hecho, creo que Visual Studio lo hará de forma predeterminada al crear un proyecto: agregará un indicador DEBUG cuando el proyecto esté en modo Depuración, y eliminará el indicador cuando cambie al modo de lanzamiento. Esto se puede configurar en la pestaña Propiedades del proyecto-> Construir. También puede agregar sus propios indicadores para cosas como el código específico de la plataforma. La bandera Pocket_PC fue famosa por realizar el desarrollo de Windows Mobile de la vieja escuela en .NET Compact Framework.

Con esto, puede agregar las directivas de pre-procesador de la siguiente manera:

#if DEBUG 

// debug code here 

#endif 
0

otra metodología, se puede incluir un "condicional" atribuyen como

[Conditional("DEBUG")] 
void DebugLog() 
{ 
    // method code here 
} 

Más información se puede encontrar here in MSDN

+0

Gracias por las respuestas de todos ustedes. Creo que esto es lo que quiero, no compilado en modo Debug. –

0
/// <summary>Function to Set Debug Flag to true if DEBUG is in Effect</summary> 
/// <param name="theDebugFlag">output - true if DEBUG, unchanged if RELEASE</param> 
[Conditional("DEBUG")] 
static void QueryDebugStatus(ref Boolean theDebugFlag) 
{ 
theDebugFlag = true; 
} 
Cuestiones relacionadas