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方法卸载应用程序域。有关详细信息,请参阅