Determinar ensamblajes cargados
-
09-06-2019 - |
Pregunta
¿Cómo puedo determinar todos los ensamblados que ha cargado mi aplicación de escritorio .NET?Me gustaría ponerlos en el cuadro Acerca de para poder consultar a los clientes por teléfono para determinar qué versión de XYZ tienen en su PC.
Sería bueno ver ensamblajes administrados y no administrados.Me doy cuenta de que la lista será larga, pero planeo realizar una búsqueda incremental.
Solución
using System;
using System.Reflection;
using System.Windows.Forms;
public class MyAppDomain
{
public static void Main(string[] args)
{
AppDomain ad = AppDomain.CurrentDomain;
Assembly[] loadedAssemblies = ad.GetAssemblies();
Console.WriteLine("Here are the assemblies loaded in this appdomain\n");
foreach(Assembly a in loadedAssemblies)
{
Console.WriteLine(a.FullName);
}
}
}
Otros consejos
O eso, o System.Reflection.Assembly.GetLoadedModules().
Tenga en cuenta que AppDomain.GetAssemblies solo iterará ensamblados en el actual Dominio de aplicación.Es posible que una aplicación tenga más de un AppDomain, por lo que puede o no hacer lo que usted desea.
Versión de PowerShell:
[System.AppDomain]::CurrentDomain.GetAssemblies()
Parece AppDomain.CurrentDomain.GetAssemblies();
hará el truco :)
Para todas las DLL, incluidas las no administradas, puede activar EnumProcessModules para obtener los identificadores del módulo y luego usar GetModuleFileName para cada identificador para obtener el nombre.
Ver http://pinvoke.net/default.aspx/psapi.EnumProcessModules y http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net no tiene la firma para esto, pero es fácil de entender).
Para 64 bits necesitas usar EnumProcessModulesEx