我想卸载一个自定义AppDomain,然后删除这个AppDomain内加载的程序集(从硬盘)。我发现很多资源建议通过assembly . load (byte[])加载程序集。这样做可以删除文件,但是,我的代码不使用这个加载的程序集。
基本上我有两个程序集:A.dll和B.dll
A.dll引用了B.dll并想要调用到B.dll。
在我的自定义AppDomain中,我通过Assembly.LoadFrom加载A.dll和B.dll。然后我在a中调用一个方法,它会自动调用加载的b
困难在于,在全局AppDomain中,A和B都已经加载,然而,全局AppDomain中加载的B.dll版本与我希望在自定义AppDomain中加载的版本不一样。
使用程序集。LoadFrom方法使A调用B的正确版本
使用Assembly.Load(byte[])方法使A调用全局AppDomain中B的版本。
我想要的是:加载A.dll作为byte[]和B正确引用它,或者用汇编加载A.dll。LoadFrom,但可以在卸载AppDomain后删除它。
有谁知道如何实现这一点吗?
谢谢,基督教
我认为一种方法是创建一个新的AppDomain并使用"影子复制"来加载新域中的程序集。然后,您应该能够删除该程序集。
看:AppDomain影子复制不工作(原始程序集锁定)