动态加载程序集在一些插件式的应用中非常常见,.net core 2.0中可以通过AssemblyLoadContext中提供程序集的动态加载功能,但取不支持卸载。现在,在.net core 3.0中提供了程序集卸载的支持(Collectible AssemblyLoadContext),更加完善了这方面的功能。

由于AssemblyLoadContext是一个抽象类,要实现这个动态程序集回收,需要实现自己的AssemblyLoadContext类,并且设置基类构造函数isCollectible为true。

public class CollectibleAssemblyLoadContext : AssemblyLoadContext
{
    public CollectibleAssemblyLoadContext() : base(isCollectible: true)
    { }
}

通过上面的设置后,我们就可以通过CollectibleAssemblyLoadContext 对象的Unload函数来实现程序集的卸载了。被卸载的程序集会在下一次GC的时候彻底回收。

参考文章:

 

posted on 2019-08-04 20:09  天方  阅读(1109)  评论(0编辑  收藏  举报