¿Cómo hago una lista de todos los conjuntos cargados?

En .Net, me gustaría enumerar todos los ensamblajes cargados sobre todos los AppDomains. Hacerlo para AppDomain de mi progtwig es bastante fácil AppDomain.CurrentDomain.GetAssemblies() . ¿Debo acceder de alguna manera a todos los dominios de aplicaciones? ¿O ya hay una herramienta que hace esto?

Usando Visual Studio

  1. Adjunte un depurador al proceso (por ejemplo, comience con la depuración o depure> Adjuntar para procesar)
  2. Mientras realiza la depuración, muestre la ventana Módulos (Depurar> Windows> Módulos)

Esto proporciona detalles sobre cada ensamblaje, dominio de aplicación y tiene algunas opciones para cargar símbolos (es decir, archivos pdb que contienen información de depuración).

enter image description here

Usando Process Explorer

Si quiere una herramienta externa, puede usar Process Explorer (freeware, publicado por Microsoft)

Haga clic en un proceso y se mostrará una lista con todos los ensamblajes utilizados. La herramienta es bastante buena ya que muestra otra información, como manejadores de archivos, etc.

Programáticamente

Verifique esta pregunta SO que explica cómo hacerlo.

Esto es con lo que terminé. Es una lista de todas las propiedades y métodos, y enumeré todos los parámetros para cada método. No logré obtener todos los valores.

 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("
" + an.ToString() + "." + type.ToString() + "." + property.Name); } } //METHODS var methods = type.GetMethods(); foreach (System.Reflection.MethodInfo method in methods){ Response.Write("
" + an.ToString() + "." + type.ToString() + "." + method.Name + ""); foreach (System.Reflection.ParameterInfo param in method.GetParameters()) { Response.Write("
Param=" + param.Name.ToString()); Response.Write("
Type=" + param.ParameterType.ToString()); Response.Write("
Position=" + param.Position.ToString()); Response.Write("
Optional=" + param.IsOptional.ToString() + "
"); } } } }