如果存在同一个程序集的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);
}
答案 0 :(得分:2)
使用AggregateCatalog而不是使用DirectoryCatalog。您必须编写查看modules目录中所有程序集的代码,确定当前的程序集是否与已处理的程序集重复,如果不是,则为该程序集创建AssemblyCatalog并将其添加到AggregateCatalog。
我不确定你能用什么逻辑来检测具有不同名称的两个DLL是“相同”的程序集。