我有许多实现IDessertPlugin
. 这些可以在各种 DLL 中找到,我使用 MEF 来启动它们的实例,以在我的应用程序中用作插件功能。
所以我想要做的是显示我使用 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);
这将从我的应用程序运行的插件子目录中加载插件。
做类似的事情
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());
}