在 Net7.0环境下测试了 Assembly.Load、Assmebly.LoadFile和Assembly.LoadFrom的区别
一、简介
很长时间没有关注一些C#技术细节了,主要在研究微服务、容器、云原生、编批等高大上的主题了,最近在写一些框架的时候,遇到了一些和在 Net Framework 框架下不一样的情况,当然了,我今天主要测试的是,在通过【添加项目引用】和【手动拷贝DLL】的情况下,这三个方法加载程序集:Assembly.Load()、Assmebly.LoadFile() 和Assembly.LoadFrom() 的区别,别的可没测试,今天就把我的测试过程发布出来,如果对大家有帮助,我当然很高兴,如果是高手,也希望不吝赐教。
测试环境:
操作系统:Windows 10 Professional
开发工具:Visual Studio 2022
测试平台:Window Form
DotNet版本:Net 7.0
二、测试过程
最近,我在写一些底层框架,需要用到反射,项目要做到热拔插、热启动等类似的功能,有人说 Assembly.Load() 可以直接输入程序集的名称就可以加载拷贝到当前运行目录下的程序集,我一运行,就出现了错误,索性,我就都测试一下,所以就有了今天的测试。在编码的过程中出现了一些和预期不一样的地方,我就把测试的代码发布出来,也希望大家提出宝贵的意见。
直接上代码,然后再总结,今天主要测试 Assembly.Load()、Assmebly.LoadFile() 和Assembly.LoadFrom() 的区别,当然只是一家之言,也有疏忽之处,也希望大家批评指正。
代码如下:
1 //202309181033、通过多种方法加载程序集
2 {
3 //可以是程序集全名,也可以文件名,必须引用项目,拷贝到目录下无效
4
5 //1.1、Load加载(没有引用项目,直接将 DLL 拷贝到程序运行目录下)
6 {
7 //[1]、使用强命名的程序集名称,报错【Could not load file or assembly 'PatrickLiu.Database.SqlServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. 系统找不到指定的文件。】
8 Assembly assembly = Assembly.Load("PatrickLiu.Database.SqlServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
9
10 //[2]、使用程序集弱命名,包含后缀名,报错【Could not load file or assembly 'PatrickLiu.Database.SqlServer.dll, Culture=neutral, PublicKeyToken=null'. 系统找不到指定的文件。】
11 Assembly assembly2 = Assembly.Load("PatrickLiu.Database.SqlServer.dll");
12
13 //[3]、完整路径,程序集名称,包含后缀名,也报错【The given assembly name was invalid.】
14 Assembly assembly22 = Assembly.Load("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll");
15
16 //[4]、完整路径,程序集名称,不包含后缀名,报错【The given assembly name was invalid.】
17 Assembly assembly23 = Assembly.Load("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer");
18
19 //[5]、程序集弱名称名称,不包含后缀名,报错【Could not load file or assembly 'PatrickLiu.Database.SqlServer, Culture=neutral, PublicKeyToken=null'. 系统找不到指定的文件。】
20 Assembly assembly24 = Assembly.Load("PatrickLiu.Database.SqlServer");
21
22 //[6]、通过 File 读取字节数据,包含程序集名称和文件后缀名,正常加载---VVVVVVV。
23 Assembly assembly25 = Assembly.Load(File.ReadAllBytes("PatrickLiu.Database.SqlServer.dll"));
24
25 //[7]、通过 File 读取字节数据,包含程序集名称,不包含文件后缀名,报错【Could not find file 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'.】。
26 //Assembly assembly26 = Assembly.Load(File.ReadAllBytes("PatrickLiu.Database.SqlServer"));
27
28 //[8]、通过 File 读取字节数据,包含程序集完整路径和文件后缀名,正常加载---VVVVVVV。
29 Assembly assembly27 = Assembly.Load(File.ReadAllBytes("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll"));
30
31 //[9]、通过 File 读取字节数据,包含程序集完整路径,不包含文件后缀名,报错【Could not find file 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'.】。
32 Assembly assembly28 = Assembly.Load(File.ReadAllBytes("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer"));
33 }
34
35 //1.2、Load加载(直接引用项目,系统自己会拷贝,没有人为拷贝 DLL 到目录下)
36 {
37 //[1]、使用强命名的程序集名称,正常加载---VVVVVVV。
38 Assembly assembly = Assembly.Load("PatrickLiu.Database.SqlServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
39
40 //[2]、使用程序集弱命名,正常加载---VVVVVVV。
41 Assembly assembly2 = Assembly.Load("PatrickLiu.Database.SqlServer");
42
43 //[3]、完整路径,程序集名称和后缀名,也报错【The given assembly name was invalid.】
44 Assembly assembly22 = Assembly.Load("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll");
45
46 //[4]、完整路径,程序集名称,不包含后缀名,报错【The given assembly name was invalid.】
47 Assembly assembly23 = Assembly.Load("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer");
48
49 //[5]、程序集弱名称名称,包含文件扩展名,报错【Could not load file or assembly 'PatrickLiu.Database.SqlServer, Culture=neutral, PublicKeyToken=null'. 系统找不到指定的文件。】
50 Assembly assembly24 = Assembly.Load("PatrickLiu.Database.SqlServer.dll");
51
52 //[6]、通过 File 读取字节数据,包含程序集后缀名,正常加载---VVVVVVV。
53 Assembly assembly25 = Assembly.Load(File.ReadAllBytes("PatrickLiu.Database.SqlServer.dll"));
54
55 //[7]、通过 File 读取字节数据,不包含程序集后缀名,报错【Could not find file 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'】。
56 Assembly assembly26 = Assembly.Load(File.ReadAllBytes("PatrickLiu.Database.SqlServer"));
57
58 //[8]、通过 File 读取字节数据,包含程序集完整路径和文件后缀名,正常加载---VVVVVVV。
59 Assembly assembly27 = Assembly.Load(File.ReadAllBytes("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll"));
60
61 //[9]、通过 File 读取字节数据,包含程序集完整路径,不包含文件后缀名,报错【Could not find file 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'.】。
62 Assembly assembly28 = Assembly.Load(File.ReadAllBytes("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer"));
63 }
64
65 //总结:
66 //Assembly.Load()针对【添加项目引用】和【通过手动拷贝】来加载程序集是有区别的,如果通过 Visual Studio IDE 【添加项目引用】菜单引用了程序集,只要书写正确,都能正常加载程序集,支持【强命名程序集】加载和【弱命名程序集】加载,如果加载的是弱命名的程序集不要写程序集的后缀名(.dll),不需要书写程序集的完整或者相对路径。Assembly.Load(File.ReadAllBytes())这个方法参数可以接受:必须包含后缀名的程序集名称或者包含完整路径、并包含后缀名的程序集名称,形如:Assembly.Load(File.ReadAllBytes("XXX.dll(包含后缀名的程序集名称)")),Assembly.Load(File.ReadAllBytes("E:\\XX\\XXX\\XXXX\\PatrickLiu.Database.SqlServer.dll(包含完整路径、并包含后缀名的程序集名称)"))这两种方式都是有效的。如果在不引用程序集(是不通过VS菜单【添加项目引用】),还想使用 Assembly.Load() 方法成功加载程序集,只能通过 Assembly.Load(File.ReadAllBytes())这种方式,当然我只测试了这个接口,其他的大家可以尝试。
67
68 //2、LoadFile加载(必须是完整路径,包含扩展名,不用引用项目,拷贝到目录就可以)
69
70 //2.1、LoadFile()在不引用程序集,通过拷贝DLL到指定目录来执行
71 {
72 //[1]、只包含程序集的名称和文件扩展名,报错【Path "PatrickLiu.Database.SqlServer.dll" is not an absolute path. 】
73 Assembly assembly221 = Assembly.LoadFile("PatrickLiu.Database.SqlServer.dll");
74
75 //[2]、包含程序集完整路径,程序集名称和文件扩展名,正常加载--------VVVVVV。
76 Assembly assembly222 = Assembly.LoadFile("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll");
77
78 //[3]、只包含程序集的名称,报错【Path "PatrickLiu.Database.SqlServer" is not an absolute path】
79 Assembly assembly223 = Assembly.LoadFile("PatrickLiu.Database.SqlServer");
80
81 //[3]、报错【Could not load file or assembly 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'. The system cannot find the file specified.”】
82 Assembly assembly224 = Assembly.LoadFile("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer");
83 }
84 //2.2、LoadFile()在引用程序集
85 {
86 //[1]、只包含程序集的名称和文件扩展名,报错【Path "PatrickLiu.Database.SqlServer.dll" is not an absolute path. 】
87 Assembly assembly221 = Assembly.LoadFile("PatrickLiu.Database.SqlServer.dll");
88
89 //[2]、包含程序集完整路径,程序集名称和文件扩展名,正常加载--------VVVVVV。
90 Assembly assembly222 = Assembly.LoadFile("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll");
91
92 //[3]、只包含程序集的名称,报错【Path "PatrickLiu.Database.SqlServer" is not an absolute path】
93 Assembly assembly223 = Assembly.LoadFile("PatrickLiu.Database.SqlServer");
94
95 //[3]、报错【Could not load file or assembly 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'. The system cannot find the file specified.”】
96 Assembly assembly224 = Assembly.LoadFile("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer");
97 }
98
99 //总结:Assembly.LoadFile()方法使用也比较简单,无论是在【添加项目引用】还是【手动拷贝】都可以正常加载程序集,唯一要注意的就是,必须书写完整的程序集路径,程序集文件名,也包含扩展名。
100
101
102 //3、LoadFrom加载(程序集全名不可以,文件名也不可以,原因不知道,文件全名可以,不用引用项目,直接拷贝就可以)
103 //必须增加后缀名
104
105 //3.1、不引用项目,把所需的Dll 拷贝到目标目录下
106 {
107
108 //[1]、使用强命名的程序集名称,正常加载---VVVVVVV。
109 Assembly assembly31 = Assembly.LoadFrom("PatrickLiu.Database.SqlServer.dll");
110
111 //[2]、使用强命名的程序集名称,报错【Could not load file or assembly 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'. 系统找不到指定的文件。”】。
112 Assembly assembly32 = Assembly.LoadFrom("PatrickLiu.Database.SqlServer");
113
114 //[3]、完成的程序集路径,程序集名称,程序集扩展名,正常加载---VVVVVVV。
115 Assembly assembly33 = Assembly.LoadFrom("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll");
116
117 //[4]、完成的程序集路径,程序集名称,程序集扩展名,报错【Could not load file or assembly 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'. 系统找不到指定的文件。】。
118 Assembly assembly34 = Assembly.LoadFrom("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer");
119 }
120
121 //3.2、引用项目,系统将 Dll 拷贝到目标目录下
122 {
123 //[1]、使用强命名的程序集名称,正常加载---VVVVVVV。
124 Assembly assembly31 = Assembly.LoadFrom("PatrickLiu.Database.SqlServer.dll");
125
126 //[2]、使用强命名的程序集名称,报错【Could not load file or assembly 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'. 系统找不到指定的文件。”】。
127 Assembly assembly32 = Assembly.LoadFrom("PatrickLiu.Database.SqlServer");
128
129 //[3]、完成的程序集路径,程序集名称,程序集扩展名,正常加载---VVVVVVV。
130 Assembly assembly33 = Assembly.LoadFrom("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer.dll");
131
132 //[4]、完成的程序集路径,程序集名称,程序集扩展名,报错【Could not load file or assembly 'E:\Visual Studio 2022\Source\Projects\PatrickLiu.DelegateDeep.Study\PatrickLiu.DelegateDeep.AllStudy\bin\Debug\net7.0\PatrickLiu.Database.SqlServer'. 系统找不到指定的文件。】。
133 Assembly assembly34 = Assembly.LoadFrom("E:\\Visual Studio 2022\\Source\\Projects\\PatrickLiu.DelegateDeep.Study\\PatrickLiu.DelegateDeep.AllStudy\\bin\\Debug\\net7.0\\PatrickLiu.Database.SqlServer");
134 }
135
136 总结:Assembly.LoadFrom()使用起来相对简单一点,无论是在已经【添加项目引用】还是【手动拷贝】都可以正常加载程序集,但是方法的参数必须是:(1)、包含完整路径、程序集名称和后缀名的程序集,如:Assembly.LoadFrom("E:\\X\\XX\\XXX\\PatrickLiu.Database.SqlServer.dll"),(2)、参数必须包含程序集名称和后缀名,如:Assembly.LoadFrom("PatrickLiu.Database.SqlServer.dll")
137 }
1、Assembly.Load()针对【添加项目引用】和【通过手动拷贝】来加载程序集是有区别的,如果通过 Visual Studio IDE 【添加项目引用】菜单引用了程序集,只要书写正确,都能正常加载程序集,支持【强命名程序集】加载和【弱命名程序集】加载,如果加载的是弱命名的程序集不要写程序集的后缀名(.dll),不需要书写程序集的完整或者相对路径。Assembly.Load(File.ReadAllBytes())这个方法参数可以接受:必须包含后缀名的程序集名称或者包含完整路径、并包含后缀名的程序集名称,形如:Assembly.Load(File.ReadAllBytes("XXX.dll(包含后缀名的程序集名称)")),Assembly.Load(File.ReadAllBytes("E:\\XX\\XXX\\XXXX\\PatrickLiu.Database.SqlServer.dll(包含完整路径、并包含后缀名的程序集名称)"))这两种方式都是有效的。如果在不引用程序集(是不通过VS菜单【添加项目引用】),还想使用 Assembly.Load() 方法成功加载程序集,只能通过 Assembly.Load(File.ReadAllBytes())这种方式,当然我只测试了这个接口,其他的大家可以尝试。
2、Assembly.LoadFile()方法使用也比较简单,无论是在【添加项目引用】还是【手动拷贝】都可以正常加载程序集,唯一要注意的就是,必须书写完整的程序集路径,程序集文件名,也包含扩展名,如:Assembly.LoadFile("E:\\X\\XX\\XXX\\PatrickLiu.Database.SqlServer.dll")。
3、Assembly.LoadFrom()使用起来相对简单一点,无论是在已经【添加项目引用】还是【手动拷贝】都可以正常加载程序集,但是方法的参数必须是:(1)、包含完整路径、程序集名称和后缀名的程序集,如:Assembly.LoadFrom("E:\\X\\XX\\XXX\\PatrickLiu.Database.SqlServer.dll"),(2)、参数必须包含程序集名称和后缀名,如:Assembly.LoadFrom("PatrickLiu.Database.SqlServer.dll")
三、总结
好了,今天就写道这里了,总算还不错,能有点收获。如果以后有新的需求,在测试把。每天进步一点点,努力一直在路上。
在 Net7.0环境下测试了 Assembly.Load、Assmebly.LoadFile和Assembly.LoadFrom的区别的更多相关文章
- [原]Redis主从复制各种环境下测试
Redis 主从复制各种环境下测试 测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 C ...
- linux环境下测试环境搭建
一.linux环境下测试环境搭建过程简述: 1.前端后台代码未分离情况下: 主要步骤为:安装jdk,安装mysql,安装tomcat,将项目代码部署到tomcat/webapps/下. 2.前端后台代 ...
- [VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”
在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqli ...
- VB6.0环境下的CATIA二次开发简介
CATIA作为CAD/CAE/CAM/PDM一体化的软件,广泛用于航空航天.汽车.船舶及电子工业,尤其在航空航天业,有八成以上厂商使用CATIA的市场[11].然而由于使用习惯和使用的侧重点不用,功能 ...
- Windows-Server-2008、IIS7.0环境下配置伪静态化
在Windows-Server-2008.IIS7.0环境下配置伪静态化 首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为 ...
- 使用zipkin2在SpringCloud2.0环境下追踪服务调用情况
1.目的: 使用zipkin2.0在Spring Cloud 2.0环境下,追踪服务调用情况. 2.所需组件: zipkin2.0,Spring Cloud 2.0,Eureka Server,Eur ...
- [转]mongodb authentication 设置权限之后,新建个管理账户和一般数据库用户,在win 7 64bit 环境下测试使用实例
如果之前安装mongodb时没有使用 --auth,那么必须要卸载MongoDB服务,进行重新安装,设置账号权限才生效! 主要是解决在测试使用mongo db 时候,总是出现的MongoAuthent ...
- 【swoole】如何在docker+swoole环境下测试udp服务
前面几篇文章讲了使用 docker+swoole 环境来测试tcp服务以及如何测试,但是当我开始学习udp服务那块的时候,发现使用原来的方式在 docker+swoole 环境下行不通啦,后来发现如果 ...
- 转 Visual C++6.0 与matlab联合编程(2)----Visual C++6.0 环境下编译和调试MEX文件
我的最初想法是利用matlab的mex命令调用C++程序生成动态链接库的,但是测试程序(文中另附)通过了,自己的实际应用程序却没有过.还是把方法贴在这儿,以便自己以后进行整理. http://shij ...
- .NET Core2.0 环境下MVC模式的支付宝扫码支付接口-沙箱环境开发测试
所有配置以及相关信息均可以从PC支付中获取 使用的生成二维码的组件名为QRCoder,该组件引用了一个第三方实现的System.Drawing类库,和支付宝官网类似 当面付SDK为Alipay.Aop ...
随机推荐
- IIC通信协议
1.IIC 通信协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的, 由于它引脚少,硬件实现简单,可扩展性强,不需要 USART.CAN 等 ...
- Galaxy Project | 生信人最值得学习的开源项目之一
我与 Galaxy Project 的渊源可以追溯到我刚毕业,还在华大实习的那一段时间,这个项目应该是我职业生涯中最重要的一段经历.虽然这么对年以来一直都关注着这个项目,但大多数都是浅尝辄止,对源码层 ...
- shell工具和脚本
Shell脚本 shell 脚本是一种更加复杂度的工具. 大多数shell都有自己的一套脚本语言,包括变量.控制流和自己的语法.shell脚本 与其他脚本语言不同之处在于,shell 脚本针对 she ...
- 野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)
MCU:STM32F103VET6 开发环境:STM32CubeMX+MDK5 实现USB的虚拟串口不需要去理解USB的底层驱动,只需要STM32CubeMX去配置生成工程即可.在野火的指南者中,是没 ...
- 揭秘 Task.Wait
目录 简介 背后的实现 Task.Wait 的两个阶段 SpinWait 阶段 BlockingWait 阶段 Task.Wait 可能会导致的问题 可能会导致线程池饥饿 可能会导致死锁 .NET 6 ...
- GPT3的应用场景:从文本生成到智能推荐
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...
- Linux系统运维之zabbix配置tomcat监控
一.介绍 半年前安装的zabbix监控,当时配合异地的测试人员给A项目做压力测试,主要监控项目部署的几台服务器的内存.CPU信息,以及后来网络I/O等,也没考虑JVM:最近闲下来,想完善下监控,故留此 ...
- win10系统网络图标变成一个地球模型并且无法连上网络
最近在家远程办公,但是遇到个很棘手的问题,电脑突然连不上无线网络了.... 无线网络图标变成地球模型如下:
- 关于ChatGPT与机器时代的展望
关于 ChatGPT 与机器时代的展望 机器人这一概念,最初不是出自计算机科学家或工程师之手,而是来自于捷克的戏剧家卡雷尔·恰佩克(Karl Capek)在 1920 年编排的一出名为"罗森 ...
- 02LED灯
目录 一.LED灯是什么 二.原理图 三.对LED进行操作 1.点亮第一个LED灯 2.LED双数点亮 3.LED流水灯 四.延迟函数的生成 一.LED灯是什么 LED是一个发光二极管,当一段为高电平 ...