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

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

Ответ 1

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

  • Прикрепить отладчик к процессу (например, начать с отладки или отладки > Прикрепить к процессу)
  • Во время отладки отобразите окно Модули (Debug > Windows > Modules)

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

введите описание изображения здесь

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

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

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

Программного

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

Ответ 2

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

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