2008-12-03 20 views
12

He estado haciendo algunas pruebas de rendimiento sobre el uso de System.Diagnostics.Debug, y parece que todo el código relacionado con la clase estática Debug se elimina completamente cuando se genera la configuración de Release . Me preguntaba cómo lo sabe el compilador. Tal vez haya alguna clase o atributo de configuración que permita especificar exactamente ese comportamiento.Eliminando el código de Release build en .NET

Estoy intentando crear un código de depuración que quiero eliminar por completo de la configuración de Release, y me preguntaba si podría hacerlo igual que la clase Debug, donde simplemente cambiando los parámetros de configuración se elimina el código.

Respuesta

19

Puede aplicar el atributo ConditionalAttribute, con la cadena "DEPURAR" a cualquier método y las llamadas a ese elemento solo estarán presentes en las construcciones DEBUG.

Esto difiere de usar el enfoque #ifdef ya que esto le permite liberar métodos para que otras personas los utilicen en sus configuraciones DEBUG (como los métodos de clase Debug en .NET framework).

+0

¡No sabía eso, eso podría ser útil! – Stormenet

+1

Esto es exactamente lo que esperaba, ya que es personalizable y extensible. – Curro

16

Visual Studio define una constante de depuración para la configuración de depuración y se puede usar esto para ajustar el código que usted no desea ejecutar en su versión de lanzamiento:

#ifdef DEBUG 
    // Your code 
#endif 

sin embargo, también se puede decorar un método con un atributo condicional, lo que significa que el método no será llamado por falta de versiones de depuración (el método y cualquier llamada sitios serán removidos de la asamblea):

[Conditional("DEBUG")] 
private void MyDebugMethod() 
{ 
    // Your code 
} 
+0

Los métodos condicionales nunca pueden devolver nada que no sea el vacío ... –

+0

Gracias por la edición Pop - ¡Lo perdí en mi prisa! –

Cuestiones relacionadas