Как я могу перечислить все загруженные сборки?
В .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>");
}
}
}
}