Ich habe eine Reihe von Klassen, die IDessertPlugin
implementieren. Diese befinden sich in verschiedenen DLLs, in denen ich MEF zum Hochdrehen von Instanzen verwende, um sie als Plug-In-Funktionalität in meiner Anwendung zu verwenden.Wie bekomme ich die Versionsnummer jeder DLL, die meine MEF-Plugins hat?
Also was ich will, ist die Versionsnummer der DLLs anzuzeigen, von denen ich Plugins mit MEF geladen habe. Ein oder mehrere Plugins sind in einer oder mehreren DLLs definiert, die ich in meiner Anwendung geladen habe.
Im Moment mache ich so etwas wie so:
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 wird Plugins ganz gut aus dem Plug-Ins-Unterverzeichnis, wo meine Anwendung läuft laden.
tun so etwas wie
catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName
nur zurückgibt "System.ComponentModel.Composition, Version = 4.0.0.0, ..."
Was ich hatte gehofft, war in der Lage sein zu wissen, dass ich habe Version 1.0 von CakePlugins.dll und Version 1.1 von IceCreamPlugins.dll. Die Plugins selbst haben kein Versionsattribut - ich möchte mich auf die Version der DLL verlassen. Hoffnung, die Sinn macht.
Ich habe nicht herausgefunden, welche DLLs ich dort verwende, so dass ich Assembly.GetName().Version
auf ihnen anrufen kann.
Ideen?
Lösung:
die Lösung für mein Problem war also ziemlich einfach, nachdem die Teile zusammengesetzt wurden.
Meine Plugin Verwaltung Code hat einen Eintrag wie folgt:
[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;
und sobald die Behälterteile Zusammensetzung stattgefunden hat, konnte ich wie so durch meine Plug-in durchlaufen:
foreach(var plugin in dessertPlugins)
{
Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}
Sie sollen poste deine Lösung als Antwort und markiere sie als akzeptiert, anstatt sie in deiner Frage zu posten. – tomfanning