Wie erhalte ich die Versionsnummer jeder DLL, die meine MEF-Plugins enthält?

Ich habe eine Reihe von Klassen, die implementierenIDessertPlugin. Diese befinden sich in verschiedenen DLLs, die ich mithilfe von MEF zum Hochfahren von Instanzen verwende, um sie als Plug-in-Funktionalität in meiner Anwendung zu verwenden.

Ich möchte also die Versionsnummer der DLLs anzeigen, aus denen ich Plugins mit MEF geladen habe. Ein oder mehrere Plugins sind in einer oder mehreren DLLs definiert, die ich in meiner Anwendung lade.

Im Moment mache ich so etwas:

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

Und das lädt Plugins ganz gut aus dem Plugins-Unterverzeichnis, in dem meine Anwendung ausgeführt wird.

Etwas machen wie

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

gibt nur "System.ComponentModel.Composition, Version = 4.0.0.0, ..." zurück

Ich hatte gehofft, wissen zu können, dass ich Version 1.0 von CakePlugins.dll und Version 1.1 von IceCreamPlugins.dll habe. Die Plugins selbst haben kein Versionsattribut - ich möchte mich auf die Version der DLL verlassen. Hoffe das macht Sinn.

Ich habe nicht herausgefunden, welche DLLs ich dort verwende, damit ich sie aufrufen kannAssembly.GetName().Version auf sie.

Ideen?

Lösung:

Die Lösung für mein Problem war also ziemlich einfach, nachdem die Teile zusammengestellt wurden.

Mein Plugin-Verwaltungscode hat folgenden Eintrag:

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

Sobald die Zusammenstellung der Containerteile stattgefunden hat, kann ich meine Plug-Ins wie folgt durchlaufen:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage