.NET Core插件热加载-AssemblyLoadContext
AssemblyLoadContext
官方文档:AssemblyLoadContext
AssemblyLoadContext主要提供程序热加载隔离,通过AssemblyLoadContext可以实现在单个进程中加载同一程序集的多个版本。
这篇文章主要讲一下在使用AssemblyLoadContext类的过程中对Load方法,及Resolving事件的理解。
Load
AssemblyLoadContext提供了以多种方式加载热插拔程序集的方式:
-
按照AssemblyName加载程序集
Load,LoadFromAssemblyName是根据AssemblyName解析和加载程序集。
-
按照AssemblyPath加载程序集
如果可以确定文件的完全限定路径,可以用LoadFromAssemblyPath来加载程序集。 -
解析程序集的Stream加载程序集
如果无法获取程序集的完全限定路径,可以先根据指定的路径读取到程序集的流,然后以LoadFromStream解析已经读取到的流的方式将程序集加载到指定的AssemblyLoadContext上。
Resolving
在使用Load方法加载程序集的时候可能会遇到正在加载的程序集的依赖程序集还未被加载的情况,这时使用Load加载程序集的时候就会提示指定文件不存在。这时候就会触发到Resolving 事件,可以在这个事件中加载程序集的上下文。