c#在AppDomain中卸载汇编而不使用原始字节数组

本文关键字:原始 字节 数组 字节数 AppDomain 卸载 汇编 | 更新日期: 2023-09-27 18:01:41

我想卸载一个自定义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后删除它。

有谁知道如何实现这一点吗?

谢谢,基督教

c#在AppDomain中卸载汇编而不使用原始字节数组

我认为一种方法是创建一个新的AppDomain并使用"影子复制"来加载新域中的程序集。然后,您应该能够删除该程序集。

看:AppDomain影子复制不工作(原始程序集锁定)