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