2009-12-11 6 views
2

L'outil depends.exe peut parcourir toutes les dll dont dépend l'exécutable, mais si la DLL est chargée dynamiquement par la classe Assembly lors de l'exécution, comment puis-je voir la DLL déjà chargée DLL (assemblages)?Application C#: comment afficher les assemblys chargés

+0

(a répondu à un commentaire) –

Répondre

6

Comme un instantané:

AppDomain.CurrentDomain.GetAssemblies() 

Comme ils se produisent:

AppDomain.CurrentDomain.AssemblyLoad 

Quelque chose comme:

static void Main() 
{ 
    AppDomain.CurrentDomain.AssemblyLoad += AssemblyLoad; 
    LogCurrent("before"); 
    AnotherMethod(); 
    LogCurrent("after"); 
} 
static void AnotherMethod() 
{ 
    // to force stuff to happen 
    new System.Data.SqlClient.SqlCommand().Dispose(); 
} 
static void LogCurrent(string caption) 
{ 
    foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) 
    { 
     Console.WriteLine(caption + ": " + asm.FullName); 
    } 
} 

static void AssemblyLoad(object sender, AssemblyLoadEventArgs args) 
{ 
    Console.WriteLine("Loaded: " + args.LoadedAssembly.FullName); 
} 
+0

Merci. Mais ce que je veux, c'est un outil externe comme depends.exe pour voir les assemblys chargés. –

+1

S'il charge la DLL à l'exécution, alors il pourrait obtenir la chaîne de n'importe où. La seule façon de le surveiller est * at * runtime. Vous pouvez utiliser windbg/sos, et attacher au processus? –

+1

WinDbg doit être le moyen le plus pratique. Vous pouvez simplement utiliser "lm" pour lister tous les modules, natifs et gérés. –

4

En supposant que vous n'êtes pas déconner avec AppDomains:

AppDomain.CurrentDomain.GetAssemblies(); 
1

Vous dites que vous recherchez un outil externe? Essayez WinDbg avec l'extension de débogage SOS; http://msdn.microsoft.com/en-us/library/bb190764.aspx.

D'autres outils peuvent être plus faciles à utiliser et offrent le même niveau de détail. Je pense que les gars de JetBrains ont un (ReSharper)

Questions connexes