web-dev-qa-db-fra.com

Comment lister tous les assemblys chargés?

En .Net, je voudrais énumérer tous les assemblys chargés sur tous les AppDomains. Le faire pour AppDomain de mon programme est assez simple AppDomain.CurrentDomain.GetAssemblies(). Dois-je en quelque sorte accéder à chaque AppDomain? Ou existe-t-il déjà un outil qui fait cela?

95
Abtin Forouzandeh

Utilisation de Visual Studio

  1. Joindre un débogueur au processus (par exemple, commencer par le débogage ou Debug> Attacher au processus)
  2. Pendant le débogage, affichez la fenêtre Modules (Debug> Windows> Modules).

Cela donne des détails sur chaque assemblage, domaine d’application et quelques options pour charger des symboles (par exemple, des fichiers pdb contenant des informations de débogage).

enter image description here

Utilisation de Process Explorer

Si vous voulez un outil externe, vous pouvez utiliser le Process Explorer (logiciel gratuit, publié par Microsoft)

Cliquez sur un processus pour afficher une liste de tous les assemblages utilisés. L'outil est très bon car il montre d'autres informations telles que les descripteurs de fichiers, etc.

par programme

Vérifiez ce SO question qui explique comment le faire.

87
Bogdan Gavril MSFT

Voici ce que j'ai fini avec. C'est une liste de toutes les propriétés et méthodes, et j'ai énuméré tous les paramètres pour chaque méthode. Je n'ai pas réussi à obtenir toutes les valeurs.

foreach(System.Reflection.AssemblyName an in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()){                      
            System.Reflection.Assembly asm = System.Reflection.Assembly.Load(an.ToString());
            foreach(Type type in asm.GetTypes()){   
                //PROPERTIES
                foreach (System.Reflection.PropertyInfo property in type.GetProperties()){
                    if (property.CanRead){
                        Response.Write("<br>" + an.ToString() + "." + type.ToString() + "." + property.Name);       
                    }
                }
                //METHODS
                var methods = type.GetMethods();
                foreach (System.Reflection.MethodInfo method in methods){               
                    Response.Write("<br><b>" + an.ToString() + "."  + type.ToString() + "." + method.Name  + "</b>");   
                    foreach (System.Reflection.ParameterInfo param in method.GetParameters())
                    {
                        Response.Write("<br><i>Param=" + param.Name.ToString());
                        Response.Write("<br>  Type=" + param.ParameterType.ToString());
                        Response.Write("<br>  Position=" + param.Position.ToString());
                        Response.Write("<br>  Optional=" + param.IsOptional.ToString() + "</i>");
                    }
                }
            }
        }
18
s15199d