を実装するクラスがいくつかありますIDessertPlugin
。これらは、MEFを使用してそれらのインスタンスを起動し、アプリケーションのプラグイン機能として使用するさまざまなDLLに含まれています。
だから私がやりたいのは、MEFを使用してプラグインをロードしたDLLのバージョン番号を表示することです。1つ以上のプラグインは、アプリケーションにロードする1つ以上の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);
そして、それは私のアプリケーションが実行されているPluginsサブディレクトリからプラグインをうまくロードします。
のようなことをする
catalog.Catalogs.First().Parts.First().GetType().Assembly.FullName
「System.ComponentModel.Composition、Version = 4.0.0.0、...」を返すだけです。
私が知りたいと思っていたのは、CakePlugins.dllのバージョン1.0とIceCreamPlugins.dllのバージョン1.1を持っているということでした。プラグイン自体にはバージョン属性がありません。DLLのバージョンに依存したいと思います。それが理にかなっていることを願っています。
そこで使用しているDLLを把握していないので、Assembly.GetName().Version
それらを呼び出すことができます。
アイデア?
解決:
したがって、パーツが構成された後の私の問題の解決策は非常に簡単でした。
私のプラグイン管理コードには、次のようなエントリがあります。
[ImportMany(typeof(IDessertPlugin)]
private IEnumerable<IDessertPluing> dessertPlugins;
コンテナパーツの構成が完了すると、次のようにプラグインを反復処理できます。
foreach(var plugin in dessertPlugins)
{
Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString());
}