關於 identityserver4 接入 skywalking System.Data.SqlClient 報錯
環境
- 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的問題。