使用 AssemblyLoadContext 加载和卸载程序集

 准备俩个项目

第一个是控制台

第二个项目是类库

类库项目中只有一个示例class,将类库的代码生成dll

 

 

 并且设置属性为复制到输出目录

复制代码
复制代码

using System.Runtime.Loader;


var domain = new AssemblyLoadContext("DomainServer", true);


var assembly = domain.LoadFromAssemblyPath(Path.Combine(AppContext.BaseDirectory, "DomainServer.dll"));


foreach (var context in AssemblyLoadContext.All)
{
Console.WriteLine("当前存在的程序集:"+context.Name);
}


Console.WriteLine("-------------------------");


domain.Unload();


foreach (var context in AssemblyLoadContext.All)
{
Console.WriteLine("当前存在的程序集:" + context.Name);
}


Console.ReadKey();

 
复制代码
复制代码

写入代码到Program类中  由于项目使用.net7创建 所以采用顶级语法 没有main方法

然后执行程序

 

 测试

 我们看到当加载程序的时候我们的项目中存在了俩个程序集

当前Unload卸载程序集的时候我们项目只存在一个程序集

使用 new AssemblyLoadContext("DomainServer", true); 创建一个AssemblyLoadContext对象

第二个参数 true启用卸载;否则,假的。默认值为false,因为启用卸载会带来性能损失。

这个卸载只会卸载AssemblyLoadContext中加载的所有程序集

我们还可以订阅卸载事件这样就知道那些程序集卸载成功了

复制代码
复制代码
using System.Runtime.Loader;

var domain = new AssemblyLoadContext("DomainServer",true);

var assembly = domain.LoadFromAssemblyPath(Path.Combine(AppContext.BaseDirectory, "DomainServer.dll"));

foreach (var context in AssemblyLoadContext.All)
{
    Console.WriteLine("当前存在的程序集:"+context.Name);
}

Console.WriteLine("-------------------------");

domain.Unloading += context =>
{
    Console.WriteLine("当前卸载的程序集:"+string.Join(',', context.Assemblies.Select(x => x.FullName)));
};

domain.Unload();

foreach (var context in AssemblyLoadContext.All)
{
    Console.WriteLine("当前存在的程序集:" + context.Name);
}

Console.ReadKey();
复制代码
复制代码

执行效果:

 

好了介绍到这里! 

.Net 6以上版本都可以使用的方法

 

技术分享群:737776595

来自 token的分享

 

 

 

出处:https://www.cnblogs.com/hejiale010426/p/16881430.html

posted on   jack_Meng  阅读(516)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-11-14 Chrome调试 ---- 控制台获取元素上绑定的事件信息以及监控事件
2019-11-14 Bootstrap基础学习 ---- 系列文章
2019-11-14 C#进阶系列 ---- 《CLR via C#》
2019-11-14 绘制指引线的JS库leader-line
2017-11-14 2018 年 深度学习框架 盘点 比较 推荐
2017-11-14 深度学习----实现一个博弈型的AI,从五子棋开始
2017-11-14 深度学习笔记----Anaconda及开发环境搭建

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩