从应用程序域中删除程序集

本文关键字:删除程序 程序集 删除 应用程序域 | 更新日期: 2023-09-27 18:15:40

所以我试图从我的Thread.GetDomain().GetAssemblies()区域。

到目前为止,我在网上看了一些解释,但还是没能弄清楚。

这是我目前得到的

AppDomain tempD = Thread.GetDomain();
tempD.DoCallBack(LoaderCallback);
AppDomain.Unload(tempD);
System.IO.File.Delete(assemblyName);
private static void LoaderCallback()
{
     Assembly.ReflectionOnlyLoad("myAssembly");
     //byte[] raw = System.IO.File.ReadAllBytes(test);
     //Assembly yacsi = Assembly.Load(raw);
     //((IScript)yacsi.CreateInstance("Script")).Go();
}

到目前为止,我一直在玩这个概念,但我正在努力建立连接,因为Thread.GetDomain();不包含Unload命令

我也无法尝试这部分((IScript)yacsi.CreateInstance("Script")).Go(),因为我不知道汇编IScript是什么,也不知道在"脚本"文本部分放置什么

如有任何想法,我将不胜感激

从应用程序域中删除程序集

要添加在顶部@RobertHarvey的评论,也退一步,你要做的是创建一个单独的AppDomain和加载你的程序集到它。之后,您可以将打算使用的各种类型编组到您的域中。

处理完它们后,可以卸载应用程序域,从而摆脱程序集。

您应该注意到域间实例封送是通过. net Remoting完成的,因此您可能希望使用远程处理租约策略,其中包括封送对象生命周期的时间值。修改租期的原因是,如果一个封送实例根本没有被调用/使用,它将在预定义的一段时间后过期。因此,您可能希望避免一次又一次地重新封送实例,而只是延长它们在域中的生命周期。

我认为这是一个很好的示例,展示了如何将程序集加载到新的AppDomain中并卸载它。还有很多其他的例子。

只要你知道这个过程应该是什么,找到它的代码是很简单的。