112 votes

Comment identifier si la DLL est une version Debug ou Release (dans .NET)

Dupliquer possible:
Comment savoir si une application .NET a été compilée en mode DEBUG ou RELEASE?

Je suis sûr que cela a déjà été demandé, mais Google et la recherche SO ont échoué.

Comment identifier si une DLL est une version release ou une version debug?

110voto

Dave Black Points 1396

À mon humble avis, L'application ci-dessus est vraiment trompeur; il ne regarde que les IsJITTrackingEnabled qui est complètement indépendant de si oui ou non le code est compilé pour l'optimisation et JIT Optimisation.

Le DebuggableAttribute est présent si vous compiler en mode Release et choisissez DebugOutput à rien d'autre que "none".

Vous devez également définir exactement ce que l'on entend par "Debug" et "Release"...

Voulez-vous dire que l'application est configurée avec l'optimisation du code? Voulez-vous dire que vous pouvez joindre la VS/Débogueur JIT? Voulez-vous dire qu'il génère DebugOutput? Voulez-vous dire qu'il définit la constante DEBUG? N'oubliez pas que vous pouvez conditionnellement rassembler des Méthodes avec le Système.Diagnostics.Conditionnel (le) de l'attribut.

À mon humble avis, quand quelqu'un demande si oui ou non une assemblée est "Debug" ou "Release", il veut dire vraiment si le code est optimisé...

Sooo, en supposant que vous êtes désireux de savoir si le code est JITOptimized, ici est la mise en œuvre correcte:

object[] attribs = ReflectedAssembly.GetCustomAttributes(typeof(DebuggableAttribute), 
                                                        false);

// If the 'DebuggableAttribute' is not found then it is definitely an OPTIMIZED build
if (attribs.Length > 0)
{
    // Just because the 'DebuggableAttribute' is found doesn't necessarily mean
    // it's a DEBUG build; we have to check the JIT Optimization flag
    // i.e. it could have the "generate PDB" checked but have JIT Optimization enabled
    DebuggableAttribute debuggableAttribute = attribs[0] as DebuggableAttribute;
    if (debuggableAttribute != null)
    {
        HasDebuggableAttribute = true;
        IsJITOptimized = !debuggableAttribute.IsJITOptimizerDisabled;
        BuildType = debuggableAttribute.IsJITOptimizerDisabled ? "Debug" : "Release";

        // check for Debug Output "full" or "pdb-only"
        DebugOutput = (debuggableAttribute.DebuggingFlags & 
                        DebuggableAttribute.DebuggingModes.Default) != 
                        DebuggableAttribute.DebuggingModes.None 
                        ? "Full" : "pdb-only";
    }
}
else
{
    IsJITOptimized = true;
    BuildType = "Release";
}

Je vous ai fourni cette mise en œuvre sur mon blog:

Comment savoir si une Assemblée est Debug ou Release

95voto

this. __curious_geek Points 23728

La seule meilleure façon de le faire est de vérifier la compilation des assemblées de lui-même. Il y a cet outil très utile appelé".NET de l'Assemblée de l'Information " qui se trouve ici par Rotem la Floraison. Après l'installation de cela, il s'associe avec .les fichiers dll pour ouvrir avec lui-même. Après l'installation, vous pouvez simplement double-cliquer sur l'Assemblée ouverte et il va vous donner les détails d'assemblage, comme indiqué dans les captures d'écran ci-dessous. De là, vous pouvez identifier si c'est de débogage compilé ou non.

alt text

alt text

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

Espérons que cela aide..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X