.net compiler-construction debugging release

¿Cómo saber si una aplicación.NET fue compilada en modo DEBUG o RELEASE?



compiler-construction debugging (5)

Tengo una aplicación instalada en mi computadora. ¿Cómo averiguo si se compiló en modo DEBUG o no?

Intenté usar .NET Reflector , pero no muestra nada específico. Esto es lo que veo:

// Assembly APPLICATION_NAME, Version 8.0.0.15072 Location: C:/APPLICATION_FOLDER/APPLICATION_NAME.exe Name: APPLICATION_NAME, Version=8.0.0.15072, Culture=neutral, PublicKeyToken=null Type: Windows Application


¿Qué hay de usar la utilidad IsDebug Jeff Key? Está un poco anticuado, pero como tiene Reflector, puede descompilarlo y volver a compilarlo en cualquier versión del marco. Yo si.


Aquí está la versión VB.Net de la solución propuesta por ZombieSheep

Public Shared Function IsDebug(Assem As [Assembly]) As Boolean For Each attrib In Assem.GetCustomAttributes(False) If TypeOf attrib Is System.Diagnostics.DebuggableAttribute Then Return DirectCast(attrib, System.Diagnostics.DebuggableAttribute).IsJITTrackingEnabled End If Next Return False End Function Public Shared Function IsThisAssemblyDebug() As Boolean Return IsDebug([Assembly].GetCallingAssembly) End Function


Estás en el camino correcto en realidad. Si miras en la ventana Desensamblador en el reflector, verás la siguiente línea si fue construida en modo de depuración:

[assembly: Debuggable(...)]


La respuesta de ZombieSheep es incorrecta.

Mi respuesta a esta pregunta duplicada está aquí: ¿Cómo saber si una aplicación .NET fue compilada en modo DEBUG o RELEASE?

Tenga mucho cuidado: basta con observar los ''atributos de ensamblaje'' en el Manifiesto de ensamblaje porque la presencia del atributo ''Depurable'' NO significa que tenga un ensamblaje que no esté optimizado para JIT. El ensamblaje podría estar optimizado para JIT pero tener la salida de ensamblaje en configuraciones de compilación avanzada configuradas para incluir información ''completa'' o ''solo pdb'', en cuyo caso el atributo ''Debuggable'' estará presente.

Consulte mis publicaciones a continuación para obtener más información: cómo saber si un ensamblado está depurado o liberado y cómo identificar si el archivo DLL es depuración o creación de versión (en .NET)

La aplicación de Jeff Key no funciona correctamente, ya que identifica una compilación "Debug" en función de si el DebuggableAttribute está presente. DebuggableAttribute está presente si compila en modo Release y elige DebugOutput en cualquier otra cosa que no sea "none".

También necesita definir exactamente qué significa "Depurar" vs. "Liberar" ...

  • ¿Quiere decir que la aplicación está configurada con optimización de código?
  • ¿Quiere decir que puede adjuntar el Visual Studio / JIT Debugger a él?
  • ¿Quiere decir que genera DebugOutput?
  • ¿Quiere decir que define la constante DEBUG? Recuerde que puede compilar métodos condicionalmente con el atributo System.Diagnostics.Conditional() .

blogged esto hace mucho tiempo, y no sé si todavía es válido o no, pero el código es algo así como ...

private void testfile(string file) { if(isAssemblyDebugBuild(file)) { MessageBox.Show(String.Format("{0} seems to be a debug build",file)); } else { MessageBox.Show(String.Format("{0} seems to be a release build",file)); } } private bool isAssemblyDebugBuild(string filename) { return isAssemblyDebugBuild(System.Reflection.Assembly.LoadFile(filename)); } private bool isAssemblyDebugBuild(System.Reflection.Assembly assemb) { bool retVal = false; foreach(object att in assemb.GetCustomAttributes(false)) { if(att.GetType() == System.Type.GetType("System.Diagnostics.DebuggableAttribute")) { retVal = ((System.Diagnostics.DebuggableAttribute)att).IsJITTrackingEnabled; } } return retVal; }