2009-03-10 7 views
8

Est-il possible de savoir si un assembly a été compilé avec l'indicateur TRACE ou DEBUG défini sans modifier l'assembly?Comment savoir si un assembly .NET a été compilé avec l'indicateur TRACE ou DEBUG

+0

Avec ou sans ajout de code à l'assemblée? – StingyJack

+0

des questions de Stackoverflow, dans des similaires une question, et beaucoup, beaucoup de réponses différentes: http://stackoverflow.com/questions/654450/programatically-detecting-release-debug-mode-net http: // stackoverflow. com/questions/798971/comment-idenfiy-si-le-dll-est-debug-ou-version-build-in-net http://stackoverflow.com/questions/194616/how-to-tell -if-net-app-a été compilé-en-debug-or-release-mode http://stackoverflow.com/questions/50900/best-way-to-detect-a-release-build-from- a-debug-build-net http://stackoverflow.com/questions/890459/asp-net-release-build-vs-debug-build – Kiquenet

Répondre

2
static bool IsDebug(){ 
bool rv = false; 
#if DEBUG 
rv = true; 
#endif 
return rv; 
} 
+0

Eh bien merci, mais je cherche r un moyen de savoir sans modifier l'assemblage. Je veux installer un assemblage déjà compilé de préférence avec un outil de ligne de commande. – Ralf

1

Il n'existe probablement aucun moyen générique. Toutefois, vous pouvez rechercher des références à Assert et Debug à partir de l'espace de noms System.Diagnostics. La présence de ceux-ci indiquera que le drapeau DEBUG a été défini.

La même chose vaut pour Trace et le drapeau TRACE.

Évidemment, cela ne fonctionnera pas si le code source n'utilise pas les types de ces espaces de noms.

3

Lien direct vers un outil IsDebug, avec instructions d'utilisation.

5

La seule meilleure façon de faire est de vérifier les assemblys compilés eux-mêmes. Il y a cet outil très utile appelé '.NET Assembly Information' trouvé here par Rotem Bloom. Après avoir installé cela, il associe les fichiers .dll à ouvrir avec lui-même. Après l'installation, vous pouvez simplement double-cliquer sur l'assemblage pour l'ouvrir et il vous donnera les détails d'assemblage tels qu'ils sont affichés dans le screenshop ci-dessous. Là, vous pouvez identifier si c'est débogué compilé ou non.

alt text http://ruchitsurati.net/myfiles/asm_info.jpg

alt text http://ruchitsurati.net/myfiles/release_assembly.PNG

LinkText: http://www.codeplex.com/AssemblyInformation

0

L'application "de IsDebug" mentionné ci-dessus, a fait un bogue où il ne reflète pas les DubuggableAttributes correctes. Il suppose à tort que si l'attribut DebuggableAttribute est présent, l'assembly n'est pas optimisé JIT. J'ai fourni une bonne mise en œuvre sur mon blog à l'adresse:

How to Tell if an Assembly is Debug or Release

Questions connexes