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

C# 从应用程序域中删除程序集,c#,multithreading,.net-assembly,appdomain,C#,Multithreading,.net Assembly,Appdomain,所以我正试图从我的系统中删除一个程序集 Thread.GetDomain().GetAssemblies() 区域 到目前为止,我已经在网络上看到了一些解释,但还没有弄明白 这就是我目前所得到的 AppDomain tempD = Thread.GetDomain(); tempD.DoCallBack(LoaderCallback); AppDomain.Unload(tempD); System.IO.File.Delete(assemblyName); private static vo

所以我正试图从我的系统中删除一个程序集
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()不包含
卸载
命令

此外,我无法尝试此部分
((IScript)yacsi.CreateInstance(“Script”)).Go()
,因为我不知道IScript是什么程序集,也不知道在“Script”文本部分放置什么


如果您想在@RobertHarvey的评论中添加任何想法,我们将不胜感激。您需要做的是创建一个单独的
AppDomain
,并将您的程序集加载到其中。 之后,您可以将您想要使用的各种类型封送到您的域中

完成这些操作后,可以卸载应用程序域,从而摆脱程序集

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

我想展示一下如何将程序集加载到新的
AppDomain
并卸载它。还有很多其他的样品


只要您知道流程应该是什么,就可以直接找到它的代码

没有线程域这样的东西。来自MSDN:如果不卸载包含单个程序集的所有应用程序域,则无法卸载该程序集。使用AppDomain的Unload方法卸载应用程序域。有关详细信息,请参阅