How do I get the version number of each DLL that has my MEF plugins?
我有许多实现
所以我想做的是显示我使用mef从中加载插件的DLL的版本号。一个或多个插件是在一个或多个DLL中定义的,这些DLL是我在应用程序中加载的。
现在我这样做:
1 2 3 4 5 6 7 8 |
这将从我的应用程序运行的plugins子目录加载插件。
做一些类似的事情
1 | 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,所以我可以在它们上调用
思想?
解决方案:
所以,我的问题的解决方案在组成部分之后非常简单。
我的插件管理代码有这样一个条目:
1 2 |
一旦容器部件组合发生,我就可以像这样迭代我的插件:
1 2 3 4 | foreach(var plugin in dessertPlugins) { Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString()); } |
您可以从不同的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /// <summary> /// This class provide inforamtion about product version. /// </summary> public class ProductVersion { private readonly FileVersionInfo fileVersionInfo; private readonly AssemblyName assemblyName; private ProductVersion(Type type) { // it done this way to prevent situation // when site has limited permissions to work with assemblies. var assembly = Assembly.GetAssembly(type); fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); assemblyName = new AssemblyName(assembly.FullName); } public string AssemblyFileVersion { get { return fileVersionInfo.FileVersion; } } public string AssemblyVersion { get { return assemblyName.Version.ToString(); } } } |
所以,我的问题的解决方案在组成部分之后非常简单。我试图深入挖掘MEF对象本身,而不是查看包含我加载的所有插件的容器。答案是完全忽略了这些插件是如何被加载的事实,只需查看实例化对象本身。
我的插件管理代码有这样一个条目:
1 2 |
一旦容器部件组合发生,我就可以像这样迭代我的插件:
1 2 3 4 | foreach(var plugin in dessertPlugins) { Console.WriteLine(Assembly.GetAssembly(plugin.GetType()).GetName().Version.ToString()); } |