不要在AssemblyLoadContext中缓存Assembly或Type对象。这可以通过使用不同于程序集的名称来加载相同的程序集来实现。
如果必须在AssemblyLoadContext中缓存对象,可以使用AssemblyLoadContext.Unload方法来卸载上下文。但是,请注意,只有在上下文中加载的所有程序集都没有被缓存或被引用时,才能成功卸载上下文。以下代码演示了如何使用AssemblyLoadContext.Unload方法:
var myLoadContext = new MyAssemblyLoadContext();
Assembly assembly = myLoadContext.LoadFromAssemblyPath("myAssembly.dll");
// 从Assembly对象获取Type对象
Type myType = assembly.GetType("MyNamespace.MyType");
// 使用Type对象创建实例
object myObject = Activator.CreateInstance(myType);
// 卸载上下文
myLoadContext.Unload();
// 创建新的AppDomain
AppDomain appDomain = AppDomain.CreateDomain("NewAppDomain");
// 在AppDomain中加载程序集
Assembly assembly = appDomain.Load("myAssembly");
// 从Assembly对象获取Type对象
Type myType = assembly.GetType("MyNamespace.MyType");
// 使用Type对象创建实例
object myObject = Activator.CreateInstance(myType);
// 卸载AppDomain
AppDomain.Unload(appDomain);