项目中有有些场景用到反射挺多的,用到了反射就离不开dll的加载。此demo适用于通过反射dll运行项目中加载和删除,不影响项目。

ConsoleApp:

 1 using AppClassLibrary;
2 using System;
3 using System.Collections.Generic;
4 using System.IO;
5 using System.Linq;
6 using System.Runtime.Loader;
7 using System.Threading;
8
9 namespace ConsoleApp
10 {
11 class Program
12 {
13 static void Main(string[] args)
14 {
15 Console.WriteLine("************非反射调用**************");
16 ICommon common = new Say();
17 common.Invoke();
18 Console.WriteLine("************非反射调用**************");
19 Console.WriteLine();
20 Console.WriteLine("**************反射调用***************");
21 InvokeMethod();
22 Console.WriteLine("**************反射调用***************");
23 Console.Read();
24 }
25 private static void InvokeMethod()
26 {
27 bool IsGo = true;
28 while (IsGo)
29 {
30 Thread.Sleep(3000);
31 List<ICommon> common_List = new List<ICommon>();
32 var path = Directory.GetCurrentDirectory();
33 string[] fileInfos = Directory.GetFiles(path).Where(f => f.Contains("comm")).ToArray();
34 var _AssemblyLoadContext = new AssemblyLoadContext(Guid.NewGuid().ToString("N"), true);
35 Dictionary<string, ICommon> fileInfoList = new Dictionary<string, ICommon>();
36 foreach (var file in fileInfos)
37 {
38 ICommon common;
39 using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read))
40 {
41 var assembly = _AssemblyLoadContext.LoadFromStream(fs);
42 Type type = assembly.GetExportedTypes().Where(t => t.GetInterfaces().Contains(typeof(ICommon))).FirstOrDefault();
43 common = Activator.CreateInstance(type) as ICommon;
44 }
45 FileInfo fileInfo = new FileInfo(file);
46 common.Invoke();
47 }
48 }
49 }
50 }
51 public class Say : ICommon
52 {
53 public void Invoke()
54 {
55 Console.WriteLine($"{this.GetType()} Say Method ");
56 }
57 }
58 }

接口类库:

using System;

namespace AppClassLibrary
{
public interface ICommon
{
void Invoke();
}
}

comm_Print.dll:

using AppClassLibrary;
using System; namespace comm_Print
{
public class Print : ICommon
{
public void Invoke()
{
Console.WriteLine($"{this.GetType()} Print Method ");
}
}
}

comm_Trace.dll:

using AppClassLibrary;
using System; namespace comm_Trace
{
public class Trace : ICommon
{
public void Invoke()
{
Console.WriteLine($"{this.GetType()} Trace Method ");
}
}
}

下面2个dll可以任意添加删除:

删除trace.dll运行结果:

netcore热插拔dll的更多相关文章

  1. Linux部署.NetCore站点 使用Supervisor进行托管部署

    前言 之前终于在Linux上部署好了.NetCore站点,但是这个站点非常“脆弱”.当我的ssh连接关闭或者我想在当前连接执行其他命令时候就必须关闭dotnet站点的执行程序.这显然不是我想要达到的效 ...

  2. NetCore1.1+Linux部署初体验

    1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.Net Core 3.Centaos安装netco ...

  3. JenKins使用pm2部署.net core网站

    登录事先准备好的 Jenkins 1 新建任务 2 源码管理 git 输入正确地址 3 构建环境:Delete workspace before build startsAbort the build ...

  4. NEO

    平台: Windows 类型: 虚拟机镜像 软件包: .net core neo application server basic software blockchain neo open sourc ...

  5. NetCore1.1+Linux

    NetCore1.1+Linux部署初体验   1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.N ...

  6. .NET Core 使用 K8S ConfigMap的正确姿势

    背景 ASP.NET Core默认的配置文件定义在appsetings.json和appsettings.{Environment}.json文件中. 这里面有一个问题就是,在使用容器部署时,每次修改 ...

  7. 使用 Dockerfile 文件但是不使用缓存生成镜像

    前一段时候使用 Dockerfile 重新部署 NetCore3.1 项目的时候很顺利,由来由于一些原因,我把以前的镜像删除,如果我们大家继续使用 docker  build 命令去生成镜像的话就会报 ...

  8. .NetCore(Avalonia) 项目dll混淆,Ubuntu 或者deepin操作系统 deb安装包解压,重新打包

    .NetCore(Avalonia) 项目dll混淆,deb安装包解压,重新打包 本文分为两部分,一部分是介绍使用 DotNetReactor6.0 及以上版本混淆.netcore项目的dll. 另一 ...

  9. .Net core 的热插拔机制的深入探索,以及卸载问题求救指南.

    .Net core 的热插拔机制的深入探索,以及卸载问题求救指南. 一.依赖文件*.deps.json的读取. 依赖文件内容如下.一般位于编译生成目录中 { "runtimeTarget&q ...

  10. .netcore跨平台 之 windows上编译,ubuntu上运行

    1 下载并安装netcore sdk    下载地址 https://github.com/dotnet/cli 选取合适的版本下载安装即可 打开 CMD ,输入dotnet,出现以下信息说明已安装好 ...

随机推荐

  1. RMI反序列化分析

    RMI介绍 RMI全程Remote Method Invocation (远程方法引用),RMI有客户端和服务端,还有一个注册中心,在java中客户端可以通过RMI调用服务端的方法,流程图如下: 服务 ...

  2. DevOps迈向标准化,平台工程让开发运维更轻松

    在近一代人的时间里,DevOps 在软件开发和运维领域占据了主导地位.这是一套开发人员都离不开的技能和方法.Pearl Zhu 在 "The Digital Master" 一书中 ...

  3. 鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)

    一.mediaquery 1.概述 媒体查询(mediaquery)它允许根据设备的不同特性(如屏幕大小.屏幕方向.分辨率.颜色深度等)来动态地调整网页的样式和布局. 通过媒体查询,可以为不同的设备定 ...

  4. SSH和SFTP是否相同

    SSH和SFTP是否相同?SSH和SFTP是经典的对.在确保通信安全方面,它们交织在一起,尽管它们具有类似的功能,但它们并不是一回事.那么,它们之间有什么区别?请仔细阅读,找出答案. 什么是SSH? ...

  5. KingbaseES 分区表与 Oracle 分区表对于空值的处理差异

    一.对于null 值处理 1.Oracle 分区字段允许为空,只要存在maxvalue 分区,值就可以插入. SQL> create table t1(id number,data varcha ...

  6. DM数据库金融行业案例(水贴一波)

      最近没遇到啥有意思的案例,都是些很简单的案例,但是又好久没写过博客了,决定水一波帖子,保持更新. 今天这个是任总老婆小王同学提供的金融SQL案例,难是不难,但是远程的时候网络卡得要命, 心累. 慢 ...

  7. #KMP,矩阵乘法#洛谷 3193 [HNOI2008]GT考试

    题目 给定\(n,m,K\)和一个长度为\(m\)的数\(x\), 问有多少个\(n\)位数满足任意一段不与\(x\)完全相同,可含前导0 \(n\leq 10^9,m\leq 20\) 分析 设\( ...

  8. #zkw线段树#洛谷 3792 由乃与大母神原型和偶像崇拜

    题目 给你一个长为 \(n\) 的序列 \(a\) 每次两个操作: 修改 \(x\) 位置的值为 \(y\) 查询区间 \([l,r]\) 是否可以重排为值域上连续的一段 分析 直接维护区间最大值和最 ...

  9. 未来已来,OpenHarmony 3.2 Release发布,迈入发展新阶段

      2023年4月9日,在社区开发者的期盼中,在春风送暖万物更新的季节里,我们迎来了OpenAtom OpenHarmony(以下简称"OpenHarmony")3.2 Relea ...

  10. 【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法

    一. 问题描述 当用户通过缩放手势.平移手势.倾斜手势和旋转手势与地图交互,控制地图移动改变其可见区域时,华为地图SDK没有提供直接获取用户手势类型的API. 二. 解决方案 华为地图SDK的地图相机 ...