准备俩个项目

第一个是控制台

第二个项目是类库

类库项目中只有一个示例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 加载程序集和卸载程序集的更多相关文章

  1. 【C#】AssemblyLoadContext 加载程序集

    使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载 一般情况下,一个 .NET 程序集加载到程序中以后,它的类型信息以及原生代码等数据会一直保留在内存中,.N ...

  2. CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法

    这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...

  3. 正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样...

    出错提示: 正尝试在 OS 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起. 原因分析: .NET2.0中增加了42种非常强大的调试助手 ...

  4. 检测到 LoaderLock:DLL"XXXX"正试图在OS加载程序锁内执行

    解决方法: ctrl+D+E或alt+ctl+e或使用菜单调试——>异常——>异常窗口——>Managed Debugging Assistants——>去掉LoaderLoc ...

  5. Win7下安装双系统Centos,并修复Centos引导加载程序安装在U盘上的问题

    1.使用U盘安装Centos时,磁盘分区划分要注意:系统(包含Win7)只能4个主分区,所以只能在删除一个主分区或者在扩展分区的空闲分区内建立目录. 2.Centos在安装步骤的最后,引导加载程序的选 ...

  6. 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码

    来自:http://www.cnblogs.com/lcxu2/archive/2011/01/16/2004016.html 正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或 ...

  7. C#如何加载程序运行目录外的程序集

    我们的应用程序部署的时候,目录结构一般不会只有运行程序的目录这一个,我们可能在运行目录下建子目录,也可能使用System32目录,也可能使用其它第三方的程序集..Net程序集 首先会在GAC中搜索相应 ...

  8. 引导加载程序:GRUB

    计算机在启动的时候,首先由BIOS中的程序执行自检,自检通过后,就根据CMOS的配置找到第一个可启动磁盘的MBR中的Boot Loader程序(一般在启动盘的第一个物理扇区,占446字节),并把控制权 ...

  9. 引导加载程序之争: LILO 和 GRUB

    在不考虑他们的工作或专业情况下,所有 Linux 用户都会使用的是哪个工具?引导加载程序.通过本文了解引导加载程序的工作原理,认识两个流行的引导加载程序 LILO(LInux LOader)和 GNU ...

随机推荐

  1. KingbaseES 参数 - ignore_char_null_check

    KingbaseES 基于PostgreSQL进行了大量的Oracle兼容性开发,为了能同时兼容Oracle 和 PG 的特性,增加参数进行控制.以下介绍 KingbaseES 下特有的参数 igno ...

  2. cmake 入门笔记

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16667896.html 1. cmake 是什么? 这些 ...

  3. UE4自动打包工具编写

    在UE的开发中,有些项目需要针对不同版本出不同的包,并有一个对应的GUI界面,供大家使用. 1.插件编写 先使用UE4自己的插件模板创建插件,做成插件形式 然后注册Slate UI,编写打开逻辑.并在 ...

  4. Markdown学习 .md学习

    # Markdown学习## 标题## 二级标题### 三级标题#### 四级标题## 字体**两个*是粗体***一个是斜体****三个是斜体加粗***~~两个~是删除线~~## 引用>走向人生 ...

  5. JAVA SE 基础总结

    § 基础知识 一.程序组织与运行原理 1.1 程序组织 一个 JAVA 程序文件中主要由如下几部分构成: package 声明 public 类:public 类与类文件名相同,因为其是作为该类文件唯 ...

  6. CVE-2022-39197(CobaltStrike XSS <=4.7)漏洞复现

    最新文章更新见个人博客 漏洞说明 根据9.20日CobaltStrike官方发布的最新4.7.1版本的更新日志中介绍,<=4.7的teamserver版本存在XSS漏洞,从而可以造成RCE远程代 ...

  7. MySQL8更改数据存储目录

  8. MySQL用户中的%到底包不包括localhost?

    1 前言 操作MySQL的时候发现,有时只建了%的账号,可以通过localhost连接,有时候却不可以,网上搜索也找不到满意的答案,干脆手动测试一波 2 两种连接方法 这里说的两种连接方法指是执行my ...

  9. 升级Gogs版本

    今天早上收到阿里云发的报警短信,大致内容如下: 前提分析: 公司代码代码仓库使用是Gogs搭建的,版本是0.11.34,二进制方式安装的,连接的是其他主机上的MySQL数据库,因此被检测到有这个漏洞 ...

  10. Codeforces Round #710 (Div. 3)

    emmm,就ac了3题 A题转换推下公式. tB题模拟,在第一个与最后一个变x后,直接i下标+k,判断当前下标前一个befor与最后一个last距离是否>k,是的话在当前下标往前找*字符然后改为 ...