关于 identityserver4 接入 skywalking System.Data.SqlClient 报错


环境

  1. identityserver4 3.1.4
  2. skywalking 8.1.0
  3. asp.net core 3.1.8
  4. efcore 3.1.8
  5. skyapm-net 1.0.0

背景

skywalking是什么就不介绍了,百度很多。.net core接入也非常简单:SkyAPM-dotnet

// 1. 添加包

// 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的问题。