所以我试图从我的程序集中删除一个程序集
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
并将程序集加载到其中。
之后,您可以将您想要使用的各种类型编码到您的域中。
使用完它们后,您可以卸载应用程序域,从而摆脱程序集。
您应该注意,域间实例编码(marshal)是通过 .NET Remoting 完成的,因此您可能想使用 remoting lease policies其中包括编码对象生命周期的时间值等。修改租约期限的原因是,如果根本没有调用/使用编码实例,则它会在预定义的时间段后过期。因此,您可能希望避免一遍又一遍地重新编码实例,而只是延长它们在域中的生命周期。
我认为this is a good sample展示如何将程序集加载到新的 AppDomain
中并卸载它。还有很多其他样本。
只要您知道该过程应该是什么,找到它的代码就很简单。
关于c# - 从应用程序域中删除程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16799227/