2011-04-01 10 views
6

Tengo un componente al que se puede hacer referencia en algunos proyectos (por ejemplo, Component.dll). Lo publico, por supuesto, en modo de lanzamiento.¿Determinar el modo de depuración/liberación en la DLL publicada? Sin #DEBUG

En otro proyecto (por ejemplo, Project.exe) hago referencia a Component.dll.
Si construyo Project.exe en modo de depuración, ¿hay alguna manera de averiguarlo en mi biblioteca Component.dll?

Para aclarar más: si tengo una clase y un método llamado Test dentro de Component.dll. ¿Puedo hacer algo como:

public void Test(){ 
    if(Debug.IsInDebugMode) 
     ... 
} 

Tenga en cuenta que Component.dll se construye en modo de lanzamiento.

Respuesta

5

Ya sea que su código esté construido en modo Release o Debug no tiene mucha importancia. La IL generada es casi la misma. La versión de depuración tendrá un atributo que el jitter utiliza para establecer los valores predeterminados de compilación, ese atributo falta en el suyo. Lo siguiente que importa es exactamente cómo depura o ejecuta su aplicación. La configuración que es importante es Herramientas + Opciones, Depuración, General, "Suprimir la optimización de JIT en la carga del módulo". Está marcado por defecto.

Lo que ahora hace que sea importante si su aplicación es iniciada por un depurador o no. Eso es fácil de averiguar, use la propiedad System.Diagnostics.Debugger.IsAttached. Cuando es falso, el código de máquina generado desde su IL va a ser optimizado por el jitter. Un caso degenerado es asociar un depurador después de que el código comenzó. Algo importante que esto no hace ninguna diferencia para usted por cierto.

+0

parece que Debugger.IsAttached es lo que necesitaba ... Marcaré la respuesta correcta cuando pruebe la solución un poco más. – icesar

Cuestiones relacionadas