将 Prism 与 WPF 一起使用,我希望允许用户从存储库中选择他们想要使用的模块。每个模块本质上都是一个附加组件,选择要使用的模块只需将其移动到 DLL 的“模块”文件夹中即可加载。
但是,在应用程序运行时尝试移动 DLL,会引发错误,因为此时 DLL 正在使用中。您如何解决这个问题并允许用户随意添加/删除模块?
一旦程序集被加载到 中AppDomain,它不会(不能)被卸载,直到AppDomain被拆除......我想这是你的问题。
如果你在网上看,有一些技术可以解决这个问题......
创建一个附加的AppDomain,然后您可以将您的程序集加载到......完成后,您只需调用Unload关闭AppDomain,这将释放程序集。
但是,您希望从另一个可以访问的类型AppDomains必须从中派生,MarshalByRefObject以便您的对象是可远程的......并且可以编组来自其他 AppDomain 的调用。
这里有一个非常有趣的技术......它将程序集加载到MemoryStream第一个,然后它让.NET从......加载程序集MemoryStream......这意味着磁盘上的“文件”没有被锁定。