4

将 Prism 与 WPF 一起使用,我希望允许用户从存储库中选择他们想要使用的模块。每个模块本质上都是一个附加组件,选择要使用的模块只需将其移动到 DLL 的“模块”文件夹中即可加载。

但是,在应用程序运行时尝试移动 DLL,会引发错误,因为此时 DLL 正在使用中。您如何解决这个问题并允许用户随意添加/删除模块?

4

1 回答 1

6

一旦程序集被加载到 中AppDomain,它不会(不能)被卸载,直到AppDomain被拆除......我想这是你的问题。

如果你在网上看,有一些技术可以解决这个问题......

创建一个额外的 AppDomain

创建一个附加的AppDomain,然后您可以将您的程序集加载到......完成后,您只需调用Unload关闭AppDomain,这将释放程序集。

但是,您希望从另一个可以访问的类型AppDomains必须从中派生,MarshalByRefObject以便您的对象是可远程的......并且可以编组来自其他 AppDomain 的调用。

将程序集加载到 MemoryStream 中

这里有一个非常有趣的技术......它将程序集加载到MemoryStream第一个,然后它让.NE​​T从......加载程序集MemoryStream......这意味着磁盘上的“文件”没有被锁定。

于 2012-10-25T09:54:29.197 回答