.Net6新版本的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的分享
.Net6新版本的AssemblyLoadContext 加载程序集和卸载程序集的更多相关文章
- 【C#】AssemblyLoadContext 加载程序集
使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载 一般情况下,一个 .NET 程序集加载到程序中以后,它的类型信息以及原生代码等数据会一直保留在内存中,.N ...
- CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法
这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...
- 正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样...
出错提示: 正尝试在 OS 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起. 原因分析: .NET2.0中增加了42种非常强大的调试助手 ...
- 检测到 LoaderLock:DLL"XXXX"正试图在OS加载程序锁内执行
解决方法: ctrl+D+E或alt+ctl+e或使用菜单调试——>异常——>异常窗口——>Managed Debugging Assistants——>去掉LoaderLoc ...
- Win7下安装双系统Centos,并修复Centos引导加载程序安装在U盘上的问题
1.使用U盘安装Centos时,磁盘分区划分要注意:系统(包含Win7)只能4个主分区,所以只能在删除一个主分区或者在扩展分区的空闲分区内建立目录. 2.Centos在安装步骤的最后,引导加载程序的选 ...
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码
来自:http://www.cnblogs.com/lcxu2/archive/2011/01/16/2004016.html 正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或 ...
- C#如何加载程序运行目录外的程序集
我们的应用程序部署的时候,目录结构一般不会只有运行程序的目录这一个,我们可能在运行目录下建子目录,也可能使用System32目录,也可能使用其它第三方的程序集..Net程序集 首先会在GAC中搜索相应 ...
- 引导加载程序:GRUB
计算机在启动的时候,首先由BIOS中的程序执行自检,自检通过后,就根据CMOS的配置找到第一个可启动磁盘的MBR中的Boot Loader程序(一般在启动盘的第一个物理扇区,占446字节),并把控制权 ...
- 引导加载程序之争: LILO 和 GRUB
在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序.通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU ...
随机推荐
- rh358 001 Linux网络与systemd设置
358 rhel7 ce ansible 部署服务 dhcp nginx vanish haproxy 打印机服务 服务管理自动化 systemd与systemctl systemctl 来管理sys ...
- 【Java】学习路径48-线程锁ReentrantLock
与上一章学习的线程锁synchronized类似,都是为了解决线程安全的问题. 使用方法: 新建一个ReentrantLock对象.(如果使用Thread多线程,则需要声明static静态) 然后在需 ...
- ESP8266 NONOS SDK学习
一.概况 1.存储 ESP8266 带有 160 KB 的 RAM,其中 64 KB 为 iRAM,96 KB 为 dRAM.iRAM 进一步 分成两块:32 KB iRAM 块运行标有 IRAM_A ...
- React Native入门 Enable live Reload
在开发项目时,有时一点点小修改就需要重新编译,打包,安装,效率比较低 RN 提供了一种实时重载 (Enable live Reload)的方式,来实现快速的调试开发,修改保存后会立刻载真机或模拟器中显 ...
- android 逆向 smali手写helloworld
编写Hello.smali文件 .class public LHelloWorld; .super Ljava/lang/Object; .method public static main([Lja ...
- 璞华PLM为全场景产品生命周期管理赋能,助力产品主线的企业数字化转型
英文版的<产品生命周期管理(PLM)软件市场--增长.趋势.COVID-19影响和预测(2022 - 2027)>中对未来PLM市场概述的描述为:"产品生命周期管理(PLM)软件 ...
- 日志收集工具 Fluentd 使用教程
转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247499829&idx=1&sn=1f92daa88d ...
- Linux病毒扫描工具ClamAV(Clam AntiVirus)安装使用
在线检测木马病毒的网址:https://www.virustotal.com/gui/home/upload 一.简介 ClamAV(Clam AntiVirus)是Linux平台上的开源病毒扫描程序 ...
- X-Pack:创建阈值检查警报
简单的事情应该简单(Simple things should be simple),这是Elastic {ON} '17的主题之一,Elastics收到了许多关于使用简单易用的UI创建警报的请求.事实 ...
- Solutions:如何运用Elastic App Search快速建立出色的React搜索体验
建立搜索体验是一项艰苦的工作. 乍一看似乎很容易:建立一个搜索栏,将数据放入数据库,然后让用户输入对该数据库的查询. 但是,在数据建模,底层逻辑以及(当然)总体设计和用户体验方面,有很多事情要考虑. ...