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