Как мне перечислить все загруженные сборки? - PullRequest
95 голосов
/ 19 января 2009

В .Net я хотел бы перечислить все загруженные сборки по всем доменам приложений. Сделать это для AppDomain моей программы достаточно просто AppDomain.CurrentDomain.GetAssemblies(). Нужно ли как-то получить доступ к каждому домену приложений? Или уже есть инструмент, который это делает?

Ответы [ 2 ]

87 голосов
/ 19 января 2009

Использование Visual Studio

  1. Присоединить отладчик к процессу (например, начать с отладки или Отладка> Присоединить к процессу)
  2. Во время отладки показать окно «Модули» («Отладка»> «Windows»> «Модули»)

Это дает подробную информацию о каждой сборке, домене приложения и имеет несколько опций для загрузки символов (то есть файлов pdb, которые содержат отладочную информацию).

enter image description here

Использование Process Explorer

Если вам нужен внешний инструмент, вы можете использовать Process Explorer (бесплатное программное обеспечение, опубликованное Microsoft)

Нажмите на процесс, и он покажет список всех используемых сборок. Инструмент довольно хорош, так как показывает другую информацию, такую ​​как дескрипторы файлов и т. Д.

Программный

Отметьте этот вопрос SO , который объясняет, как это сделать.

17 голосов
/ 29 ноября 2011

Вот чем я закончил. Это список всех свойств и методов, и я перечислил все параметры для каждого метода. Мне не удалось получить все значения.

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>");
                    }
                }
            }
        }
...