Como faço para obter o número da versão de cada DLL que tem meus plugins MEF?

Eu tenho um número de classes que implementamIDessertPlugin. Estes são encontrados em várias DLLs que eu uso o MEF para criar instâncias deles para usar como funcionalidade de plug-in em meu aplicativo.

Então, o que eu estou querendo fazer é exibir o número da versão das DLLs das quais eu carreguei plugins usando o MEF. Um ou mais plugins são definidos em uma ou mais DLLs que eu carrego no meu aplicativo.

Agora eu faço algo assim:

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);

E isso irá carregar os plugins muito bem no subdiretório Plugins onde meu aplicativo é executado.

Fazendo algo como

catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName

apenas retorna "System.ComponentModel.Composition, Version = 4.0.0.0, ..."

O que eu estava esperando para poder saber era que eu tenho a versão 1.0 do CakePlugins.dll e versão 1.1 do IceCreamPlugins.dll. Os próprios plugins não possuem um atributo de versão sobre eles - estou querendo contar com a versão da DLL. Espero que isso faça sentido.

Eu não descobri para saber quais DLLs eu estou usando lá para que eu possa ligarAssembly.GetName().Version neles.

Idéias?

Solução:

Então, a solução para o meu problema foi bem direta depois que as partes foram compostas.

Meu código de gerenciamento de plug-ins tem uma entrada assim:

[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;

e uma vez que a composição das partes do container tenha ocorrido, eu poderia iterar através dos meus plugins da seguinte forma:

foreach(var plugin in dessertPlugins)
{
   Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}

questionAnswers(2)

yourAnswerToTheQuestion