[英]Why is an AppDomain relevant to a plugin manager implemented with MEF
我用MEF和FileSystemWatcher編寫了一個簡單的插件管理器類,用於自動刷新插件,但是我聽到有人說,要能夠動態添加和刪除程序集(插件),我們還需要使用AppDomain。
誰能指導我何時需要一起使用AppDomain和MEF(尤其是在我的插件管理器方案中)?
它們之間是什么關系?
簡而言之,當您要覆蓋應用程序正在使用的.dll時,需要一個AppDomain,並且該AppDomain必須指定ShadowCopyFiles = "true"
。
卷影復制文件意味着AppDomain將.dll復制到一個臨時目錄並從該臨時目錄加載它們,以便可以覆蓋原始.dll。
不幸的是,除非卸載包含它們的AppDomain,否則無法卸載加載到任何AppDomain中的程序集。
考慮到這一點,刷新插件很困難,因為您必須A)卸載整個AppDomain,這必然會卸載該AppDomain中的所有其他.dll,或者B)允許加載同一.dll的新版本,從而增加內存您的應用程序的足跡。 第二個選項還要求您的插件.dll具有強名稱,並使用不同的版本號,以便MEF識別差異並加載新的.dll。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.