我有很多類實現IDessertPlugin
。這些可以在各種DLL中找到,我使用MEF將它們的實例作爲我的應用程序中的插件功能使用。如何獲取每個具有我的MEF插件的DLL的版本號?
所以我想要做的是顯示我已經使用MEF加載插件的DLL的版本號。一個或多個插件在我的應用程序中加載的一個或多個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,版本= 4.0.0.0,...」
我希望能夠知道的是,我已經有1.0版本的CakePlugins.dll和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());
}
你應該將您的解決方案作爲答案發布,並將其標記爲已接受,而不是將其發佈到您的問題中。 – tomfanning 2012-08-07 15:44:34