当前位置: 首页 > 编程语言 > C#

卸载mef中的dll文件分享

时间:2023-04-10 13:26:37 C#

卸载mef中的dll文件我有一些插件是DLL文件。我的应用程序加载DLL并运行良好。但是当我尝试删除旧插件并用新插件替换它时,它不允许我这样做。因为它已被应用程序加载。我发现通过使用appdomain,我们可以做到这一点。但是我找不到使用mef的解决方案。我需要一个可以在mef上运行的代码。下面是我加载插件的代码。//创建聚合目录的实例。它聚合其他目录varaggregateCatalog=newAggregateCatalog();//构建部件可用的目录路径vardirectoryPath="Pathtopluginsfolder";//使用目录目录从指定路径中的可用dll中加载部件vardirectoryCatalog=newDirectoryCatalog(directoryPath,"*.dll");//添加到聚合目录aggregateCatalog.Catalogs.Add(directoryCatalog);//Crete组合容器varcontainer=newCompositionContainer(aggregateCatalog);//可组合部件在这里创建,即导入和导出组件在这里组装container.ComposeParts(this);我发现通过使用appdomain,我们可以做到这一点。但是我找不到使用mef的解决方案。不幸的是,MEF不支持这一点。MEF是为应用程序可扩展性而设计的,而不是作为支持运行时代码卸载和替换的通用插件系统。实现此功能的唯一方法是在单独的AppDomain中使用MEF并将AppDomain作为一个整体卸载。除了卸载打开程序集的整个AppDomain之外,CLR本身不支持卸载已加载的程序集。如果您尝试像这样在目录中插入程序集对象:Assemblyassembly=Assembly.Load(System.IO.File.ReadAllBytes(Path.Combine(directoryPath,ItemPlugin)));aggregateCatalog.Catalogs.Add(新的AssemblyCatalog(程序集));以后可以删除/更改文件...以上是C#学习教程:卸载mef中的dll文件分享全部内容,如果对大家有用需要进一步了解C#学习教程,希望你会给予它很多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: