2

所以我试图从我 所在的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 是什么程序集,也不知道在“脚本”文本部分中放置什么

任何想法将不胜感激

4

1 回答 1

2

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

完成后,您可以卸载应用程序域,从而摆脱程序集。

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

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

只要您知道流程应该是什么,查找代码就很简单。

于 2013-05-28T19:35:34.310 回答