J’ai une application installée sur mon ordinateur. Comment puis-je savoir s’il a été compilé en mode DEBUG ou non?
J’ai essayé d’utiliser .NET Reflector , mais cela ne montre rien de spécifique. Voici ce que je vois:
// 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
J’ai blogué cela il y a longtemps, et je ne sais pas si c’est toujours valable ou non, mais le code est quelque chose comme …
private void testfile(ssortingng file) { if(isAssemblyDebugBuild(file)) { MessageBox.Show(Ssortingng.Format("{0} seems to be a debug build",file)); } else { MessageBox.Show(Ssortingng.Format("{0} seems to be a release build",file)); } } private bool isAssemblyDebugBuild(ssortingng filename) { return isAssemblyDebugBuild(System.Reflection.Assembly.LoadFile(filename)); } private bool isAssemblyDebugBuild(System.Reflection.Assembly assemb) { bool retVal = false; foreach(object att in assemb.GetCustomAtsortingbutes(false)) { if(att.GetType() == System.Type.GetType("System.Diagnostics.DebuggableAtsortingbute")) { retVal = ((System.Diagnostics.DebuggableAtsortingbute)att).IsJITTrackingEnabled; } } return retVal; }
La réponse de ZombieSheep est incorrecte.
Ma réponse à cette question est la suivante: Comment savoir si une application .NET a été compilée en mode DEBUG ou RELEASE?
Soyez très prudent – le simple fait de regarder les «atsortingbuts d’assemblage» dans le manifeste d’assembly pour la présence de l’atsortingbut ‘Déboguable’ ne signifie PAS que vous avez un assembly qui n’est pas optimisé pour JIT. L’assemblage pourrait être optimisé pour JIT, mais la sortie d’assemblage sous Paramètres de construction avancés doit avoir pour valeur d’inclure les informations ‘full’ ou ‘pdb only’ – auquel cas l’atsortingbut ‘Debuggable’ sera présent.
Veuillez vous référer à mes articles ci-dessous pour plus d’informations: Comment savoir si un assembly est un programme de débogage ou une version et comment identifier si le fichier DLL est un fichier de débogage ou de version (en .NET)
L’application de Jeff Key ne fonctionne pas correctement, car elle identifie une génération “Debug” basée sur la présence de DebuggableAtsortingbute. DebuggableAtsortingbute est présent si vous comstackz en mode Release et choisissez DebugOutput pour autre chose que “none”.
Vous devez également définir ce que l’on entend par “Debug” vs “Release” …
System.Diagnostics.Conditional()
. Vous êtes sur la bonne voie en fait. Si vous regardez dans la fenêtre Disassembler dans réflecteur, vous verrez la ligne suivante si elle a été construite en mode débogage:
[assembly: Debuggable(...)]
Que diriez-vous d’utiliser l’utilitaire IsDebug de Jeff Key? C’est un peu daté, mais comme vous avez Reflector, vous pouvez le décomstackr et le recomstackr dans n’importe quelle version du framework. J’ai fait.
Voici la version VB.Net de la solution proposée par ZombieSheep
Public Shared Function IsDebug(Assem As [Assembly]) As Boolean For Each atsortingb In Assem.GetCustomAtsortingbutes(False) If TypeOf atsortingb Is System.Diagnostics.DebuggableAtsortingbute Then Return DirectCast(atsortingb, System.Diagnostics.DebuggableAtsortingbute).IsJITTrackingEnabled End If Next Return False End Function Public Shared Function IsThisAssemblyDebug() As Boolean Return IsDebug([Assembly].GetCallingAssembly) End Function