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