5

如果存在相同程序集的 2 个副本(可能是错误的),我如何防止 MEF 加载重复的模块

  • Assembly1.dll

  • Assembly2.dll(Assembly1 的副本)

    [ImportMany]
    public IList<IModule> Modules { get; private set; }
    
    public void BuildUp()
    {
        Modules = new List<IModule>();
    
        var catalog = new DirectoryCatalog(@".\Modules");
        var container = new CompositionContainer(catalog);
    
        container.ComposeParts(this);
    }
    
4

1 回答 1

2

不要使用 DirectoryCatalog,而是使用 AggregateCatalog。您必须编写代码来查看模块目录中的所有程序集,确定当前程序集是否与已处理的程序集重复,如果不是,则为该程序集创建一个 AssemblyCatalog 并将其添加到 AggregateCatalog。

不过,我不确定您可以使用什么逻辑来检测两个具有不同名称的 DLL 是“相同”程序集。

于 2009-11-10T16:57:24.997 回答