Tengo varias clases que implementan IDessertPlugin
. Estos se encuentran en varias DLL que utilizo MEF para aumentar las instancias de ellos para usar como funcionalidad de complemento en mi aplicación.¿Cómo obtengo el número de versión de cada DLL que tiene mis complementos MEF?
Entonces, lo que quiero hacer es mostrar el número de versión de las DLL desde las que he cargado los complementos utilizando MEF. Uno o más complementos se definen en uno o más DLL que cargo en mi aplicación.
En este momento hago algo así:
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(
new DirectoryCatalog(Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().location), "Plugins")));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
Y eso va a cargar plugins simplemente finas desde el subdirectorio plugins donde mis ejecuta la aplicación.
Hacer algo como
catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName
sólo devuelve "System.ComponentModel.Composition, Version = 4.0.0.0, ..."
lo que estaba esperando a ser capaz de saber que era yo' Tengo la versión 1.0 de CakePlugins.dll y la versión 1.1 de IceCreamPlugins.dll. Los plugins en sí mismos no tienen un atributo de versión sobre ellos. Estoy deseando confiar en la versión de la DLL. Espero que tenga sentido.
No he descubierto las DLL que estoy utilizando allí para poder llamar al Assembly.GetName().Version
en ellas.
Ideas?
Solución:
Por lo tanto, la solución a mi problema era bastante sencillo después de que las partes se han compuesto.
Mi código de gestión plugin tiene una entrada de este modo:
[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;
y una vez que la composición de piezas de contenedores ha tenido lugar, podría iterar a través de mis plug-ins, así:
foreach(var plugin in dessertPlugins)
{
Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}
Usted debe publique su solución como una respuesta y márquela como aceptada en lugar de publicarla en su pregunta. – tomfanning