2010-10-07 8 views
5

Ho una libreria di riferimento, al suo interno voglio eseguire un'azione diversa se l'assembly che fa riferimento è in modalità DEBUG/RELEASE.Come dire se chiamare assembly è in modalità DEBUG dal lib compilato di riferimento

È possibile attivare la condizione che il gruppo di chiamata sia in modalità DEBUG/RELEASE?

C'è un modo per fare questo senza ricorrere a qualcosa di simile a:.

bool debug = false; 

#if DEBUG 
debug = true; 
#endif 

referencedlib.someclass.debug = debug; 

L'assemblea riferimento sarà sempre il punto di partenza della domanda (ad esempio applicazioni web

risposta

8

Google says è molto semplice . È possibile ottenere le informazioni dal DebuggableAttribute del gruppo in questione:

IsAssemblyDebugBuild(Assembly.GetCallingAssembly()); 

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; 
} 
+0

Mi dispiace per essere un dolore, ma "Google" non dice nulla. È uno strumento di recupero-me-alcuni-esempi-perché-sono-troppo-pigro. : D – Nayan

+1

Non sono troppo pigro! Mi sembra di avere google-fu debole oggi :( –

+0

@Nayan Google dice no! – bitbonk

1

È possibile utilizzare reflection per ottenere il gruppo chiamante e utilizzare this method per verificare se è in modalità di debug.

0

La risposta accettata è corretta. Ecco una versione alternativa che salta la fase di iterazione e viene fornita come metodo di estensione:

public static class AssemblyExtensions 
{ 
    public static bool IsDebugBuild(this Assembly assembly) 
    { 
     if (assembly == null) 
     { 
      throw new ArgumentNullException(nameof(assembly)); 
     } 

     return assembly.GetCustomAttribute<DebuggableAttribute>()?.IsJITTrackingEnabled ?? false; 
    } 
} 
Problemi correlati