@SpringBootTest 报错: UnsatisfiedDependencyException
Spring Boot Test 报错: UnsatisfiedDependencyException
在使用 @SpringBootTest
测试时,出现 UnsatisfiedDependencyException
报错,原因和解决方法如下。
报错原因分析
1. Spring 存在涉及 Bean 没有被添加
- Spring Boot 测试中,默认会加载应用空间中所有的 Bean,如果没有配置并可被注入,则会报
UnsatisfiedDependencyException
。
报错里提到的 Bean:graceShutDown11
和 ravencastSessionPool22
,可能是你配置中存在依赖问题。
2. Prometheus 监控配置不完整
- 报错提到的
PrometheusMeterRegistry
,表明项目使用了 Prometheus 监控功能,但没有配置正确的依赖或 Bean。
解决方法
方法 1: 确保依赖 Bean 已被定义
- 检查
graceShutDown
和ravencastSessionPool
的定义:- 确保它们已被配置成 Spring 管理的 Bean,通过
@Component
,@Service
或@Bean
注释。
- 确保它们已被配置成 Spring 管理的 Bean,通过
- 确保它们所需要的依赖存在并可被注入。
示例:
@Component
public class GraceShutDown {@Autowiredprivate RavencastSessionPool ravencastSessionPool;// 默认方法
}
方法 2: 添加 Prometheus 监控实现依赖
- 确保已在项目中存在下列依赖:
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><version>最新版本</version> </dependency>
- 确保配置文件中存在正确配置:
management.metrics.export.prometheus.enabled=true
方法 3: 使用更轻量的测试进行专门测试
- 如果不需要加载全部应用上下文,可考虑使用更轻量的测试配置:
示例:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {YourTestConfig.class})
class YourTestClass {@Testvoid testMethod() {// 测试逻辑}
}
方法 4: 处理静态代码块中的依赖问题
- 检查静态代码块,确保它们不依赖 Spring 上下文。
示例:
public class GraceShutDown {static {// 检查此处是否有与 Spring 相关的依赖}
}
总结
- 确保 Bean 依赖配置正确。
- 配置和添加 Prometheus 监控所需依赖。
- 使用更轻量的测试配置。
@SpringBootTest报错解决方案
在使用 @SpringBootTest
进行测试时,如果报出 UnsatisfiedDependencyException
错误,通常是因为依赖没有被正确配置或调用。如下对存在问题进行解析:
一、问题分析
1. 测试环境与实际运行环境不匹配
@SpringBootTest
默认加载全部应用上下文,如果调用到了实际运行环境中依赖于存在的 Bean,但没有在测试环境配置,就会报错。
2. Prometheus 监控依赖未配置
- 报错里提到了
PrometheusMeterRegistry
,说明它是监控相关的部分。如果该 Bean 在测试环境中不需要,可能需要提前去除或分隔调用。
3. @SpringBootTest 被加载了不具备测试条件的其他 Bean
- 如果静态依赖和配置不正确,可能引起过副优充测试。
二、解决方法
1. 排除不必要的 Bean
如果 graceShutDown
和 PrometheusMeterRegistry
不需要测试,可以通过排除指定自动配置类:
@SpringBootTest(exclude = {PrometheusAutoConfiguration.class})
class YourTestClass {@Testvoid testMethod() {}
}
2. 指定自定义的测试上下文
仅加载测试所需要的 Bean:
@SpringBootTest(classes = {TestConfig.class})
class YourTestClass {@Testvoid testMethod() {}
}
TestConfig
实现:
@Configuration
public class TestConfig {// 添加测试所需的 Bean
}
3. 使用 @MockBean 替换不需要测试的 Bean
如果 Bean 在测试中不需要被实现,可以使用 @MockBean
逻拟实现:
@SpringBootTest
class YourTestClass {@MockBeanprivate PrometheusMeterRegistry prometheusMeterRegistry;@Testvoid testMethod() {}
}
4. 指定测试配置文件
确保测试环境使用与实际运行环境相匹配的配置:
@SpringBootTest(properties = "spring.config.name=application-test")
class YourTestClass {@Testvoid testMethod() {}
}
配置文件可加上许多特定元素,调试部署。
5. 采用更轻量的测试配置方式
如果不需要全应用部署,使用更专门的测试:
@WebMvcTest
class YourTestClass {@Testvoid testMethod() {}
}
或者选择加载构成配置。
三、总结
- 检查 Bean 配置,确保实现部分被展示。
- 在测试中排除不必要的 Bean 加载。
- 添加测试环境的最小依赖体系,提升测试效率。
PrometheusMeterRegistry 在 SpringBoot 测试中报错解决方案
问题分析
从报错信息和描述看,错误是由于 graceShutDown
类中依赖了 PrometheusMeterRegistry
,但在测试环境中,该 Bean 未正确被创建或配置。
可能的原因如下:
graceShutDown
类直接或间接依赖了PrometheusMeterRegistry
,在创建 Bean 时触发错误。PrometheusMeterRegistry
需要特定的配置或启用条件,但在测试环境中没有被配置。- 配置或组件中存在暴露的依赖问题。
解决方法
1. 检查 graceShutDown
类的实现
确保 graceShutDown
类的以下地方:
- 是否直接依赖了
PrometheusMeterRegistry
,如通过构造器注入,字段注入等。
以下是一个可能的例子:
@Component
public class GraceShutDown {private final PrometheusMeterRegistry meterRegistry;@Autowiredpublic GraceShutDown(PrometheusMeterRegistry meterRegistry) {this.meterRegistry = meterRegistry;}// 使用 meterRegistry 的方法
}
如果确实是这个问题,可以考虑将该依赖逻拟化或者排除。
2. Mock 或排除 Prometheus 相关依赖
方案 1: 使用 @MockBean
逻拟化 Bean
如果测试中不需要实际使用 PrometheusMeterRegistry
,可以通过以下方式逻拟化:
@SpringBootTest
class YourTestClass {@MockBeanprivate PrometheusMeterRegistry meterRegistry;@Testvoid testMethod() {// 测试内容}
}
方案 2: 排除相关的自动配置
如果确实不需要运行相关监控相关配置,可以排除相关的自动配置:
@SpringBootTest(exclude = {PrometheusAutoConfiguration.class})
class YourTestClass {@Testvoid testMethod() {// 测试内容}
}
3. 指定测试环境配置
确保 Prometheus 所需要的配置被测试环境装载:
@SpringBootTest(properties = {"management.metrics.export.prometheus.enabled=true"})
class YourTestClass {@Testvoid testMethod() {// 测试内容}
}
4. 加载小范围配置
仅加载测试需要的 Bean:
@SpringBootTest(classes = {TestConfig.class})
class YourTestClass {@Testvoid testMethod() {}
}@Configuration
class TestConfig {// 添加所需要的配置
}
5. 单独测试 graceShutDown
类
如果确认问题出在该类,可考虑单独测试:
@ExtendWith(SpringExtension.class)
class GraceShutDownTest {@Mockprivate PrometheusMeterRegistry meterRegistry;@InjectMocksprivate GraceShutDown graceShutDown;@Testvoid testGraceShutDown() {// 测试内容}
}
总结
- 检查
graceShutDown
的依赖和实现,确实是否有直接问题。 - 考虑通过\u Mock 或排除 Bean 的方式分隔不需要的依赖。
- 在测试环境中确保配置和实际运行一致,
相关文章:
@SpringBootTest 报错: UnsatisfiedDependencyException
Spring Boot Test 报错: UnsatisfiedDependencyException 在使用 SpringBootTest 测试时,出现 UnsatisfiedDependencyException 报错,原因和解决方法如下。 报错原因分析 1. Spring 存在涉及 Bean 没有被添加 Spring Boot 测试中,默认会加…...
QT数据库操作详解
在Qt中,操作数据库通常使用Qt SQL模块,该模块提供了一组类来与数据库进行交互。 数据库连接与查询执行 QSqlDatabase::addDatabase(): 添加一个数据库连接。 QSqlDatabase::open(): 打开数据库连接。 QSqlDatabase::close(): 关闭数据库连接。 QSql…...
Coding Caprice - dynamic programming13
647. 回文子串 class Solution { public:int countSubstrings(string s) {int s_len s.size();vector<int> dp{0};int out(1);for(int i1; i<s_len; i){out;vector<int> dq{i};if(s[i]s[i-1]){dq.push_back(i-1);out;}for(int j:dp){if(j>0&&s[j-1…...
Fastapi教程:使用 aioredis 连接池执行Redis 的高效异步操作
在构建高性能的 Web 应用时,缓存系统是一个至关重要的组成部分。Redis 是最常见的缓存系统之一,它提供了高效的存储与读取机制。然而,在与 Redis 进行频繁交互时,创建和销毁连接可能会成为瓶颈。为了优化这一问题,我们…...
Elasticsearch对象映射
Spring Data Elasticsearch对象映射是将Java对象(域实体)映射到存储在Elasticsearchs中的JSON表示形式并返回的过程。内部用于此映射的类是MappingElasticsearchConverter。 元模型对象映射 基于元模型的方法使用域类型信息对Elasticsearch进行读写操作…...
解决Logitech G hub 无法进入一直转圈的方案(2024.12)
如果你不是最新版本无法加载尝试以下方案:删除AppData 文件夹下的logihub文件夹 具体路径:用户名根据实际你的请情况修改 C:\Users\Administrator\AppData\Local 如果你有通过lua编译脚本,记得备份!! ↓如果你是最新…...
Debezium SchemaNameAdjuster 分析
Debezium SchemaNameAdjuster 分析 目录 1. 概述2. 核心功能3. 实现原理4. 应用场景5. 扩展示例6. 总结1. 概述 SchemaNameAdjuster 是 Debezium 中的一个工具类,主要用于确保 Schema 名称符合 Avro 命名规范。在数据库变更事件被转换为 Kafka 消息时,需要为每个表和字段创…...
聊一下前端常见的图片格式
1. JPEG (JPG) 概述:是一种有损压缩的图像格式,它通过去除图像中一些人类视觉不易察觉的细节来减小文件大小。它支持数百万种颜色,能够很好地呈现照片等色彩丰富的图像内容。优点: 压缩率高:可以在保持相对较好的图像…...
npm : 无法加载文件 D:\nodejs\npm.ps1
问题描述 npm run serve 启动一个Vue项目,报错如下: npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/? LinkID135170 中的 about_Execution_Policies。…...
如何使用 Python 实现 TCP / IP 客户端和服务端通信?
如何使用Python实现TCP/IP客户端和服务端通信? 1. TCP/IP通信基础 TCP/IP(传输控制协议/互联网协议)是互联网的基础协议,用于在网络中的计算机之间进行可靠的数据传输。在Python中,可以使用socket模块来实现TCP/IP通…...
IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁
模拟环境 dev 分支开发完一个功能,需要合并到 master 分支,如果现在直接 merge 合并的话 git分支树会出现杂乱分叉,先把 master 分支 rebase 到 dev git分支树就会是整洁的一条直线 git rebase介绍 rebase:翻译成中文是重新设定,…...
【指南】03 CSC联系外导
确定外导 课题组有合作关系的国外导师与自己研究方向密切相关的国外导师国外高校官网、谷歌学术、Research Gate等平台检索不可以是中国港澳台的高校科研院所或机构注意外导所在高校排名和科研水平可列表记录注意外国签证政策 发送邮件 自我介绍简要介绍CSC介绍自己的研究对…...
axios请求拦截器和响应拦截器,封装naive-ui的 Loading Bar加载条和useMessage消息提示
接之前的博客设计从0开始边做边学,用vue和python做一个博客,非规范化项目,怎么简单怎么弄,跑的起来有啥毛病解决啥毛病(三),目前已经完成了基本的功能demo,但是请求接口不可能每个页…...
联网功耗电流波形
飞行模式下,Wifi 可连接或不可连接的条件对比: 1. 基电流为 3.5 mA 的环境下, 网络不可连接时,会产生一个持续0.72s,平均电流为 54.8 mA 的电流波形 2. 基电流为 6.8 mA 的环境下, 网络可连接时,会产生一个持续4.64s,平均电流为 73.63 mA 的电流波形 …...
Unity 模板测试透视效果(URP)
可以实现笼中窥梦和PicoVR中通过VST局部透视效果。 使用到的Shader: Shader "Unlit/StencilShader" {Properties{[IntRange]_Index("Stencil Index",Range(0,255))0}SubShader{Tags{"RenderType""Opaque""Queue""Geo…...
C 语言动态爱心代码
C 语言动态爱心代码 代码 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / …...
Linux服务器磁盘满了,清理步骤命令
Linux服务器磁盘满了,磁盘空间不足,清理步骤 1. 检查磁盘使用情况 了解哪些文件和目录占用了大量空间。 使用 df -h查看所有分区的总体使用情况。 使用 du -sh /directory/* | sort -rh | head -n 10 查找特定目录下占用空间最大的前10个子目录或文件。…...
CTFshow-命令执行(Web41-57)
CTFshow-命令执行(Web41-57) CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客 总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客 对比两者的源代码,我们发现,cat指令把flag.php的内容导出后依…...
Batch Norm vs Layer Norm:为什么 Transformer 更适合用 Layer Norm?
Batch Norm vs Layer Norm:为什么 Transformer 更适合用 Layer Norm? 1. Batch Norm 和 Layer Norm 的定义与作用 1.1 Batch Normalization (BN) Batch Norm 是一种归一化方法,主要用于加速深层神经网络的训练。它在每个小批量(b…...
jQuery Mobile页面事件
jQuery Mobile页面事件 jQuery Mobile是一个基于jQuery的移动设备友好的Web应用框架,它提供了一套丰富的页面事件,这些事件在移动应用的交互设计中扮演着重要的角色。本文将详细介绍jQuery Mobile中的页面事件,包括它们的触发时机、用途以及如何使用它们来增强移动应用的交…...
接口测试Day01-HTTP请求
概念 接口:系统之间(外部系统与内部系统,内部系统与内部系统)数据交通的通道。 接口测试:校验 接口回发的 响应数据 与 预期结果 是否一致。 接口测试,可以绕过前端界面。直接对 服务器进行测试!…...
使用枚举实现单例模式,不会反序列化破坏攻击,不会被反射破坏攻击。(附带枚举单例的简单实现)
原因分析 1.反序列化方法 ① jdk8中的Enum源码中对反序列化方法进行重写,抛出异常。 java.lang.Enum#readObject方法截图如下 ②java.io.ObjectInputStream#readObject 方法中的 readEnum 方法处理了枚举类型的反序列化,从而确保了枚举的单例特性。 …...
又细又长的马尾:tail
英语里边有一个单词 tail,意为“尾巴”,这应当是众所周知的事情了。 不过,tail 这条尾巴,并不简单,因为它还是一个词根,也就是说 tail 其实是自由词素。 事实上,tail 最初来自 马尾 这样一个概…...
记录:VB6 直接获取 PictureBox 的图像数据到数组 GetDIBits
记得十几年前写几个游戏辅助工具的时候用过这个功能,这几天想直接把图片控件的数据转换为 PNG 文件不想用存出 BMP 文件交换,直接取得图像数据操作即可,但是忘记了当初是怎么做的了,找到个 2007 年的例子好像不太对,运…...
uboot移植网络驱动过程,无法ping通mx6ull和ubuntu问题解决方案
开发板:mx6ull-ALPHA_V2.4 ubuntu版本:20.04 1.现在虚拟机设置中添加网路适配器用于开启桥接模式 2.在编辑中打开“虚拟网络编辑器” 我的电脑本身只有VMnet1和VMnet8,需要底下“添加网络”,增加这个VMnet0 ,并且进行…...
Ubuntu 安装软件被锁:Could not get lock问题解决
今天刚使用虚拟机安装完Ubuntu系统,想要安装所需要的软件是出现了以下错误信息: 错误信息: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/…...
S2CRNet 图像测评笔记 图像融合
空间分离曲线渲染网络用于高效高分辨率图像协调 开源地址: https://github.com/stefanLeong/S2CRNet 效果图: 左边是输入,最右边是效果:效果不是很理想,色差问题还在 本地代码: S2CRNet-demos-main...
Lambda表达式
C Lambda表达式 文章目录 C Lambda表达式基本用法捕获列表返回值mutable Lambda 表达式是一种匿名函数,可以在代码中直接定义并使用。它主要用于简化那些只需要简单操作的函数定义。在 C 中,lambda 表达式的语法结构通常包括以下几个部分: 捕…...
高通 Android12 添加APN信息
1、产品有国外客户,需要添加国外的定制APN信息。 2、路径: SC200E_AP/QCM2290_Android12.0_R02_r004/QSSI.12/vendor/qcom/proprietary/commonsys/telephony-apps/etc/apns-conf.xml在上述路径中将APN信息添加即可。 3、路径 SC200E_AP\QCM2290_Andr…...
探秘 IIC 与 SPI:软件模拟与硬件接口的抉择之谜
一、IIC 软件模拟:受限中的灵活应变 在嵌入式系统的通信世界里,IIC 常采用软件模拟的方式开展工作,这背后有着诸多考量。首先,硬件资源的限制是一个重要因素。不少微控制器并没有内置功能完备的 IIC 硬件模块,甚至压根…...
【ts语法学习】主要数据类型与变量声明时的类型注解
一、ts中的主要数据类型 1.布尔类型 (boolean) 2.数值类型 (number) 3.字符串类型 (string) 4.数组类型 (Array) 5.对象类型 (object) 6.null 和 undefined 7.元组类型 (Tuple) 8.枚举类型 (enum) 9.任意类型 (any) 10.never 11.unknown 12.void TypeScript(简称 …...
论文概览 |《Sustainable Cities and Society》2024.12 Vol.116
本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要,一共包括52篇SCI论文! 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…...
Vue3之响应式系统详解
Vue3中的响应式系统是其核心功能之一,它使得数据变化能够自动触发视图更新,从而简化了开发过程,提高了开发效率。本文将详细阐述Vue3中的响应式系统,包括其核心概念、工作原理、实现方式、应用场景以及优势。同时,本文…...
只出现一次的数字(字节面试题 最优解)
题目来源 136. 只出现一次的数字 - 力扣(LeetCode) 题目描述 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问…...
VMware Workstation的有线连接消失了
进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除,然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了,可以联网...
leetcode-146.LRU缓存(易理解)
为了实现一个满足 LRU(最近最少使用)缓存约束的数据结构,我们需要在 (O(1)) 时间复杂度内完成 get 和 put 操作。这通常可以通过结合使用哈希表和双向链表来实现: 哈希表:用于在 (O(1)) 时间复杂度内实现对缓存中元素…...
ArcGIS地理空间平台manager存在任意文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
ARCGIS国土超级工具集1.2更新说明
ARCGIS国土超级工具集V1.2版本,功能已增加至47 个。在V1.1的基础上修复了若干使用时发现的BUG,新增了"矢量分割工具"菜单,同时增加及更新了了若干功能,新工具使用说明如下: 一、勘测定界工具栏更新界址点成果…...
「iOS」通过CoreLocation Framework深入了解MVC架构
「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构 文章目录 「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构前言CoreLocation了解根据需求建模设计属性方法设计协议传值Block传值KVONotification通知方式 总结参考文章 前言 在这个学期的前…...
spring实例化对象的几种方式(使用XML配置文件)
前言 Spring框架作为一个轻量级的控制反转(IoC)容器,为开发者提供了多种对象实例化的策略。通过这些策略,开发者可以更加灵活地控制对象的生命周期和依赖关系。无论是通过XML配置、注解配置还是Java配置,Spring都能…...
pyhton 批量往PDF文件指定位置里面填写数据
pyhton 批量往PDF文件指定位置里面填写数据 import PyPDF2 from PyPDF2 import PdfReader, PdfWriterdef modify_pdf(input_pdf_path, output_pdf_path, page_number, x, y, text):reader PdfReader(input_pdf_path)writer PdfWriter()for page in reader.pages:writer.add_p…...
深度学习——激活函数、损失函数、优化器
深度学习——激活函数、损失函数、优化器 1、激活函数1.1、一些常见的激活函数1.1.1、sigmoid1.1.2、softmax1.1.3、tanh1.1.4、ReLU1.1.5、Leaky ReLU1.1.6、PReLU1.1.7、GeLU1.1.8、ELU 1.2、激活函数的特点1.2.1、非线性1.2.2、几乎处处可微1.2.3、计算简单1.2.4、非饱和性1…...
上拉模式下引脚电平与代码读取值的关系
在单片机系统中,引脚的输入模式设置对上拉模式下引脚电平及代码读取值有着关键影响。 当引脚被配置为上拉模式且无外部信号输入时,内部上拉电阻使引脚保持高电平。此时,代码读取该引脚的值为 1。例如在一个简单的电路中,仅设置了…...
UNIX简史
从1991年Linux出现至今,由于众多IT巨头以及技术社区的推动,Linux已经成为非常成熟、可用于各种关键领域的操作系统,适当了解其发展历史,对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的…...
python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入
【1】引言 前序学习过程中,我们偶然发现:如果原始图像是png格式,将其从BGR转向HSV,再从HSV转回BGR后,图像的效果要好于JPG格式。 文章链接为: python学opencv|读取图像(十二)BGR图…...
ElasticSearch 搜索、排序、分页功能
一、DSL 查询文档 ElasticSearch 的查询依然是基于 json 风格的 DSL 来实现的。 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl.html 1.1 DSL 查询分类 常见的查询类型包括: 查询所有:查询出所有数…...
MAC虚拟机上安装WDA环境
MAC虚拟机上安装WDA环境 一、MAC虚拟机切换root权限二、macOS上安装xcode若你的macOS系统可以在appstore下载安装若你安装的macOS系统版本太低,无法在appstore上安装xcode 三、macOS上安装WebDriverAgent四、使用xcode配置WDA安装到手机上高版本系统支持 一、MAC虚拟…...
KDD 2025预讲会:10位一作的论文分享与话题思辨|12月18日全天直播
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 圆桌思辨:一作们的KDD 2025投稿经验分享与热点探讨 1. KDD 2025 与往年相比有哪些新变化?两次投稿周期的新规则有哪些影响? 2. 第一篇KDD的工作是如何成功被接收的࿱…...
Input system手游的控制
手游离不开触屏控制 新的inputsystem 实现过程 安装input system在projectsetting中的player的othersettings中active input handing设置both打开window的analysis的input debugger。在options中设置为simulate touch input from mouse or pen。 增强触摸控制的相关知识 启…...
在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c
在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c 1. Installing the extension (在 Visual Studio Code 中安装插件)1.1. Extensions for Visual Studio Code1.2. C/C1.2.1. Pre-requisites 1.3. Makefile Tools 2. Configuring your project (配置项目)2.1.…...