c# - 如何获取具有我的 MEF 插件的每个 DLL 的版本号?

标签 c# .net mef

我有许多实现了 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);

这将从我的应用程序运行的 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());
}

最佳答案

您可以从不同的属性 AssemblyVersionAssemblyFileVersionAssemblyDescription 获取程序集信息。

                /// <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();
                        }
                    }



                }

关于c# - 如何获取具有我的 MEF 插件的每个 DLL 的版本号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11848785/

相关文章:

javascript - WebBrowser 中具有 Doctype 的不同 JavaScript 行为

c# - asp.net:如何从下拉列表中删除项目?

c# - 使用 Mutex 来防止同一程序的多个实例安全运行吗?

c# - 如何注入(inject)在 Windsor 中注册的 MEF [ImportingConstructor] 依赖项?

c# - MEF 2 - 未找到与具有多个重载的构造函数的约束相匹配的导出

c# - 使用 Entity Framework 返回所有 IQueryable

.net - 如何添加 SOAP 安全 header

c# - 在 .NET 4 中编译 .NET 代码?

c# - 下载文件超时

c# - Prism/MEF : How can 2 windows' viewmodels talk to each other?