netcore热插拔dll
项目中有有些场景用到反射挺多的,用到了反射就离不开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的更多相关文章
- Linux部署.NetCore站点 使用Supervisor进行托管部署
前言 之前终于在Linux上部署好了.NetCore站点,但是这个站点非常“脆弱”.当我的ssh连接关闭或者我想在当前连接执行其他命令时候就必须关闭dotnet站点的执行程序.这显然不是我想要达到的效 ...
- NetCore1.1+Linux部署初体验
1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.Net Core 3.Centaos安装netco ...
- JenKins使用pm2部署.net core网站
登录事先准备好的 Jenkins 1 新建任务 2 源码管理 git 输入正确地址 3 构建环境:Delete workspace before build startsAbort the build ...
- NEO
平台: Windows 类型: 虚拟机镜像 软件包: .net core neo application server basic software blockchain neo open sourc ...
- NetCore1.1+Linux
NetCore1.1+Linux部署初体验 1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.N ...
- .NET Core 使用 K8S ConfigMap的正确姿势
背景 ASP.NET Core默认的配置文件定义在appsetings.json和appsettings.{Environment}.json文件中. 这里面有一个问题就是,在使用容器部署时,每次修改 ...
- 使用 Dockerfile 文件但是不使用缓存生成镜像
前一段时候使用 Dockerfile 重新部署 NetCore3.1 项目的时候很顺利,由来由于一些原因,我把以前的镜像删除,如果我们大家继续使用 docker build 命令去生成镜像的话就会报 ...
- .NetCore(Avalonia) 项目dll混淆,Ubuntu 或者deepin操作系统 deb安装包解压,重新打包
.NetCore(Avalonia) 项目dll混淆,deb安装包解压,重新打包 本文分为两部分,一部分是介绍使用 DotNetReactor6.0 及以上版本混淆.netcore项目的dll. 另一 ...
- .Net core 的热插拔机制的深入探索,以及卸载问题求救指南.
.Net core 的热插拔机制的深入探索,以及卸载问题求救指南. 一.依赖文件*.deps.json的读取. 依赖文件内容如下.一般位于编译生成目录中 { "runtimeTarget&q ...
- .netcore跨平台 之 windows上编译,ubuntu上运行
1 下载并安装netcore sdk 下载地址 https://github.com/dotnet/cli 选取合适的版本下载安装即可 打开 CMD ,输入dotnet,出现以下信息说明已安装好 ...
随机推荐
- 记录--uniapp微信小程序引入threeJs并导入模型
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 我的需求是使用uniapp写微信小程序,在小程序中使用threeJs就行了,目前暂不考虑兼容app什么的. 1.引入小程序版的thr ...
- FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
学习FFmpeg的时候,经常要到GitHub下载各种开源代码,比如FFmpeg的源码页面位于https://github.com/FFmpeg/FFmpeg.然而国内访问GitHub很不稳定,经常打 ...
- SPSS安装及破解教程
SPSS是一种统计分析软件,其全称为"Statistical Product and Service Solutions".以下是SPSS的作用和好处: 作用: 数据管理:SPSS ...
- 在 .NET 中使用 OPC UA 协议
目录 什么是 OPC UA UaExpert 的使用 下载 UaExpert 首次启动 添加 OPC UA 服务器 连接 OPC UA 服务器 查看 PLC 数据 使用 C# 读写 OPC UA 数据 ...
- base64格式上传图片后台写入
前台 var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function(e){//回调 } 后台 ...
- VIVADO原理图中的概念
VIVADO原理图的基本作用 * 查看不同层次下的逻辑关系或者网表关系 * 检查逻辑设计是否可以通过数字电路实现 * 观察重要的信号的走向,分析可能的优化方向 VIVADO原理图几个基本概念 (1) ...
- hadoop集群启动脚本文件myhadoop.sh
#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start& ...
- WPF实现树形表格控件(TreeListView)
前言 本文将探讨如何利用WPF框架实现树形表格控件,该控件不仅能够有效地展示复杂的层级数据,还能够提供丰富的个性化定制选项.我们将介绍如何使用WPF提供的控件.模板.布局.数据绑定等技术来构建这样一个 ...
- OpenHarmony—应用间HSP开发指导
应用间HSP用于不同应用间的代码.资源共享. 应用间HSP的宿主应用是一种特殊状态的应用,只能由一个HSP组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用.当普通应用运行时,通过动态调用的 ...
- SQL 中的运算符与别名:使用示例和语法详解
SQL中的IN运算符 IN运算符允许您在WHERE子句中指定多个值,它是多个OR条件的简写. 示例:获取您自己的SQL Server 返回所有来自'Germany'.'France'或'UK'的客户: ...