6

Sto usando VS2010/2012 e mi chiedevo se c'è un modo (magari usando la riflessione) per vedere come viene assemblato un assieme.Come determinare come è stato creato un assemblaggio

Quando eseguo Debug, utilizzo lo #if DEBUG per scrivere le informazioni di debug nella console.

Tuttavia, quando si finisce con un gruppo di assemblee, c'è un modo per vedere come vengono creati? Ottenere il numero di versione è facile, ma non sono stato in grado di scoprire come controllare il tipo di build.

+2

Che cosa si intende per "verificare il tipo di costruzione "? – Kippie

+2

E cosa sei * veramente * interessato a scoprire? (Simboli di compilazione condizionale? Opzioni di ottimizzazione? Opzioni di debug?) –

+0

Puoi chiarire che cosa stai cercando di ottenere? –

risposta

3

ci sono 3 modi:

private bool IsAssemblyDebugBuild(string filepath) 
{ 
    return IsAssemblyDebugBuild(Assembly.LoadFile(Path.GetFullPath(filepath))); 
} 

private bool IsAssemblyDebugBuild(Assembly assembly) 
{ 
    foreach (var attribute in assembly.GetCustomAttributes(false)) 
    { 
     var debuggableAttribute = attribute as DebuggableAttribute; 
     if(debuggableAttribute != null) 
     { 
      return debuggableAttribute.IsJITTrackingEnabled; 
     } 
    } 
    return false; 
} 

o utilizzando AssemblyInfo metadati :

#if DEBUG 
[assembly: AssemblyConfiguration("Debug")] 
#else 
[assembly: AssemblyConfiguration("Release")] 
#endif 

o utilizzando una costante con #if DEBUG nel codice

#if DEBUG 
     public const bool IsDebug = true; 
#else 
     public const bool IsDebug = false; 
#endif 

io preferisco il secondo modo in modo che io possa leggere sia per codice e con Windows Explorer

+0

Ho risposto, ma ho letto anche il post originale e il post del blog e ho trovato una versione leggermente modificata di 'IsAssemblyDebugBuild' che assomigliava a questo: 'return assembly.GetCustomAttributes (false) .Any (x => (x come DebuggableAttribute)! = Null? (X come DebuggableAttribute) .IsJITTrackingEnabled: false);' – Verakso

3

Una volta compilati, non è possibile, a meno che non si inseriscano personalmente i metadati.

Ad esempio, è possibile utilizzare AssemblyConfigurationAttribute o .NET 4.5 di AssemblyMetadataAttribute

#if DEBUG 
[assembly: AssemblyConfiguration("Debug")] 
#else 
[assembly: AssemblyConfiguration("Release")] 
#endif 

o

#if DEBUG 
[assembly: AssemblyMetadata("DefinedVariable", "DEBUG")] 
#endif 
+0

+1 Non sapevo su AssemblyMetadata in .net4.5 – giammin

Problemi correlati