环境
- identityserver4 3.1.4
- skywalking 8.1.0
- asp.net core 3.1.8
- efcore 3.1.8
- skyapm-net 1.0.0
背景
skywalking是什么就不介绍了,百度很多。.net core接入也非常简单:SkyAPM-dotnet
// 1. 添加包
<PackageReference Include="SkyAPM.Agent.AspNetCore" Version="1.0.0" />
// 2. 添加配置文件
"SkyWalking": {
"ServiceName": "IdentityServer",
"Namespace": "Infrastructure",
"HeaderVersions": [
"sw8"
],
"Logging": {
"Level": "Information",
"FilePath": "logs\\skyapm-{Date}.log"
},
"Transport": {
"Interval": 3000,
// 8.1.0 是 v8
"ProtocolVersion": "v8",
"QueueSize": 30000,
"BatchSize": 3000,
"gRPC": {
// 使用环境变量替换
// "Servers": "192.168.0.230:11800",
"Timeout": 10000,
"ConnectTimeout": 10000,
"ReportTimeout": 600000,
"Authentication": ""
}
}
}
// 3. 添加环境变量
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES="SkyAPM.Agent.AspNetCore"
公司用identityserver4做单点登录和令牌的颁发。于是想用skywalking观察一下identityserver4服务的响应情况。
接入还是那么顺滑。。。
提交代码 -> merge 代码 -> 自动打包镜像上传仓库 -> 部署 一气呵成,简直不要太完美,准备收拾收拾下班回家。
问题
然而事情并没有想象中那么简单,启动报错。。。assmbly System.Data.SqlClient 4.6.1 not found
what???
解决之路
Round 1
好吧,很简单嘛,安装一下SqlClient 4.6.1不就好了,提交代码 -> merge 代码 -> 自动打包镜像上传仓库 -> 部署 一气呵成,简直不要太完美,第二次准备下班回家。。。
果然是事情并没有那么简单。。。依然报错。。。
Round 2
那只能是identityserver4 与 skyapm-net 的依赖包冲突了,项目中用的efcore版本为3.1.8,看了下skyapm-net好像是用的3.1.0
难道是这个版本的问题,果断降级。。。提交代码 -> merge 代码 -> 自动打包镜像上传仓库 -> 部署 一气呵成,简直不要太完美,又一次准备下班回家。。。
果然不是efcore版本的问题。。。
Round 3
我项目中也没显式的指定SqlClient用4.6.1,看了下skyapm-net发现它引用的SqlClient版本为4.8.0,那这4.6.1是什么鬼???
不管了那项目中显式引用一下SqlClient4.8.0,保持跟skyapm-net一样总没问题了嘛,提交代码 -> merge 代码 -> 自动打包镜像上传仓库 -> 部署 忐忑等待结果。。。
果然成功了。。。what???好吧,解决了就好,不求甚解。。。又已经下班一个小时了,下班回家。
后记
还是没找到是什么原因,不知道到底是哪儿冲突了,找不到问题所在,不如把锅抛给.net core吧,是不是它还是不够成熟,这个情况是不是应该编译时期就应该暴露出来,或者说在安装依赖的时候就应该提示
,emmm....对的就是.net的问题。