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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top