所以我正试图从我的手中删除一个程序集
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是什么,也不知道在“脚本”文本部分中放置什么
任何想法都将受到赞赏
答案 0 :(得分:2)
要添加@ RobertHarvey的评论并退后一步,您要做的是创建一个单独的AppDomain
并将您的程序集加载到其中。
之后,您可以将您打算使用的各种类型编组到您的域中。
完成它们后,您可以卸载应用程序域,从而摆脱程序集。
您应该注意,域间实例封送是通过.NET Remoting完成的,因此您可能希望使用remoting lease policies,其中包括封送对象生命周期的时间值。修改租约期限的原因是编组实例在预定义的一段时间后到期,如果它根本没有调用/使用的话。因此,您可能希望避免一遍又一遍地重新编组实例,并且只是延长其域中的生命周期。
我认为this is a good sample展示了如何将程序集加载到新的AppDomain
中并卸载它。那里有很多其他样品。
只要你知道这个过程应该是什么,找到它的代码是很简单的。