Как получить номер версии каждой библиотеки DLL, в которой есть мои плагины MEF?
У меня есть несколько классов, которые реализуютIDessertPlugin
, Они находятся в различных библиотеках DLL, которые я использую MEF, чтобы ускорить их экземпляры для использования в качестве подключаемого модуля в моем приложении.
Поэтому я хочу показать номер версии библиотек DLL, из которых я загружал плагины с использованием MEF. Один или несколько плагинов определены в одной или нескольких библиотеках DLL, которые я загружаю в свое приложение.
Прямо сейчас я делаю что-то вроде этого:
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);
И это прекрасно загрузит плагины из подкаталога плагинов, где работает мое приложение.
Делать что-то вроде
catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName
просто возвращает & quot; System.ComponentModel.Composition, Version = 4.0.0.0, ... & quot;
Я надеялся узнать, что у меня установлена версия 1.0 файла CakePlugins.dll и версия 1.1 файла IceCreamPlugins.dll. Сами плагины не имеют атрибута версии о них - я хочу полагаться на версию DLL. Надеюсь, что это имеет смысл.
Я не понял, какие библиотеки DLL я там использую, чтобы я мог вызватьAssembly.GetName().Version
на них.
Идеи?
Solution:
Итак, решение моей проблемы было довольно простым после того, как части были составлены.
Мой код управления плагином имеет следующую запись:
[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;
и после компоновки частей контейнера я мог бы перебирать свои плагины следующим образом:
foreach(var plugin in dessertPlugins)
{
Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}