脚本专用AssemblyLoadContext: 在运行时解析动态assembly的#imports依赖
ScriptLoadContext
01 Syntax
Microsoft.VisualBasic.Scripting.Runtime.ScriptLoadContext
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| Load | 1 | 运行时依赖解析核心: 当脚本代码第一次触碰某个外部类型时, CLR会调用本函数来定位对应的程序集 |
| LoadFromFile | 1 | 使用LoadFromStream而非LoadFromAssemblyPath: 1) 不对磁盘dll产生文件锁 2) collectible卸载更干净 |
| GetType | 1 | 在本脚本ALC的作用域内查找类型。 查找顺序: 主脚本assembly => 已加载的依赖assembly => #imports惰性加载 注意: 若返回的类型来自被隔离加载的assembly(本ALC重新加载的dll), 它与宿主Default ALC中的同名类型不是同一个Type对象, 此时不应将此类型的实例传回宿主的强类型API |
| CreateInstance | 1 | 在脚本ALC作用域内实例化目标类型 |
03 Fields
| Name | Overloads | Summary |
|---|---|---|
| _hostAsm | 1 | 宿主引擎程序集(类型同一性绝对必要, 必须共享) |
| _defaultAsmIndex | 1 | Default ALC 已加载程序集的名称索引。 宿主启动时其全部依赖(含CommandLine所在库)已加载至此, 缓存为字典避免每次Load回调都做LINQ扫描 |
04 Members
Load(
AssemblyName)运行时依赖解析核心: 当脚本代码第一次触碰某个外部类型时, CLR会调用本函数来定位对应的程序集
LoadFromFile(
String)使用LoadFromStream而非LoadFromAssemblyPath: 1) 不对磁盘dll产生文件锁 2) collectible卸载更干净
GetType(
Assembly, String)在本脚本ALC的作用域内查找类型。 查找顺序: 主脚本assembly => 已加载的依赖assembly => #imports惰性加载
注意: 若返回的类型来自被隔离加载的assembly(本ALC重新加载的dll), 它与宿主Default ALC中的同名类型不是同一个Type对象, 此时不应将此类型的实例传回宿主的强类型API
CreateInstance(
Assembly, String, Object())在脚本ALC作用域内实例化目标类型
_hostAsm
宿主引擎程序集(类型同一性绝对必要, 必须共享)
_defaultAsmIndex
Default ALC 已加载程序集的名称索引。 宿主启动时其全部依赖(含CommandLine所在库)已加载至此, 缓存为字典避免每次Load回调都做LINQ扫描