Mam kilka klas, które implementują IDessertPlugin
. Znajdują się one w różnych bibliotekach DLL, w których używam MEF, aby zakodować instancje, których używają jako wtyczek w mojej aplikacji.Jak uzyskać numer wersji każdej biblioteki DLL z wtyczkami MEF?
Co chcę zrobić, to wyświetlić numer wersji bibliotek DLL, z których załadowałem wtyczki za pomocą MEF. Jedna lub więcej wtyczek jest zdefiniowanych w jednej lub wielu bibliotekach DLL, które ładuję w mojej aplikacji.
Teraz robię coś tak:
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);
I to będzie załadować wtyczki dobrze z podkatalogu Plugins gdzie mój działa aplikacja.
Uprawiając jak
catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName
tylko zwraca "System.ComponentModel.Composition, Version = 4.0.0.0, ..."
Co miałem nadzieję być w stanie wiedzieć, że ja” ma wersję 1.0 pliku CakePlugins.dll i wersję 1.1 IceCreamPlugins.dll. Same wtyczki nie mają atrybutu wersji o nich - chcę polegać na wersji biblioteki DLL. Mam nadzieję, że ma to sens.
Nie zorientowałem się, które biblioteki DLL używam, aby móc na nich zadzwonić pod numer Assembly.GetName().Version
.
Pomysły?
Rozwiązanie:
Więc rozwiązanie mojego problemu było całkiem proste po części zostały składzie.
Mój kod zarządzający Wtyczka posiada wpis tak:
[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;
a gdy kompozycja części zbiornika nastąpiło, mógłbym iterację moich wtyczek tak:
foreach(var plugin in dessertPlugins)
{
Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}
Powinieneś umieść swoje rozwiązanie jako odpowiedź i zaznacz je jako zaakceptowane, zamiast zamieszczać je w swoim pytaniu. – tomfanning