三步快速解決dll衝突問題

2021-07-31 23:25:11 字數 2983 閱讀 3327

最近在推廣應用我們的分布式服務閘道器(web api):業務組大部分對外的業務邏輯以hsf服務或者自定義擴充套件外掛程式的方式,註冊並發布到分布式服務閘道器中,統一對外提供webapi服務。臨時介紹下我們的分布式服務閘道器:

1. 一鍵註冊、發布webapi服務,

2. 統一管理發布webapi服務,實現webapi的服務化治理

3. 整合安全認證、加解密、監控、日誌等aspect

4. 流量安全控制:流控

5. 橫向伸縮、彈性擴充套件,支援大規模併發 

6. 簡化webapi開發,提公升開發效率,減少重複開發工作

在實際的開發應用中,業務邏輯dll要註冊、發布到分布式服務閘道器中,例如引數型別、自定義擴充套件外掛程式等。

同時,各個業務模組之間存在spi層介面、實體類的依賴,例如:a中依賴b.spi.dll, b發布了最新的b.spi.dll, a未發布,這樣會產生乙個問題:

例如:

{"

errorinfo

":"資料序列化錯誤:程式集「***.module.carmdelanalyse.spi, version=1.0.0.0, culture=neutral,

publickeytoken=null」中的型別「***.module.carmdelanalyse.spi.carmodelanalyseresult」未標記為可序列化。r\rn

在 system.runtime.serialization.formatterservices.internalgetserializablemembers(runtimetype type)\r\n

在 system.runtime.serialization.formatterservices.getserializablemembers(type type, streamingcontext context)\r\n

在 system.runtime.serialization.formatters.binary.writeobjectinfo.initmemberinfo()\r\n

在 system.runtime.serialization.formatters.binary.writeobjectinfo.initserialize(object obj, isurrogateselector surrogateselector,

streamingcontext context, serobjectinfoinit serobjectinfoinit, iformatterconverter converter, objectwriter objectwriter,

serializationbinder binder)\r\n 在 system.runtime.serialization.formatters.binary.objectwriter.write(writeobjectinfo objectinfo,

nameinfo membernameinfo, nameinfo typenameinfo)\r\n 在 system.runtime.serialization.formatters.binary.objectwriter.serialize(object graph,

header inheaders, __binarywriter serwriter, boolean fcheck)\r\n

在 system.runtime.serialization.formatters.binary.binaryformatter.serialize(stream serializationstream, object graph, header headers,

boolean fcheck)\r\n 在 system.runtime.serialization.formatters.binary.binaryformatter.serialize(stream serializationstream, object graph)\r\n

類似的錯誤還有:

未能載入檔案或程式集「***.dll」或它的某乙個依賴項

執行時如何快速定位到dll 衝突的根本原因,找到到底載入的dll是在gac中、還是bin中、還是指定目錄中的dll?

有經驗的老司機,分享給大家乙個三步法,屢試不爽!!!

1. 找到程式主程序,右鍵:create dump file,如果iis站點:指定應用程式池下的w3wp程序,如果自己的服務程序,直接找程序即可

2. 安裝指定版本的windbg(x86\x64), ctrl+d 載入第一步抓的dump檔案,.loadby sos clr  -> !dumpdomain

3. 找到相關的dll檔案路徑,ilspy,反編譯定位問題,解決。

show:

1. 抓dump:通過上面的錯誤堆疊,我們定位到w3wp.exe,  右鍵建立轉儲檔案

依次輸入命令:.loadby sos clr  -> !dumpdomain

得到domain資訊輸出:

以servicestack.redis.dll這個dll為例,可以找到在哪個路徑下載入的dll:類似的找業務相關的dll即可:

windbg的確在記憶體映象分析時是乙個利器,贊乙個!

周國慶2017/4/23

動態規劃 三步問題

有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階或者3階。實現一種方法,計算小孩有多少種上樓梯的方式。當n比較大時 比如n 1000000 結果會很大,要求對結果進行模1000000007操作。n 1時,結果為1 n 2時,結果為2 2 1 1 n 3時,結果為4 3 2 1 1 2 1...

解決同名dll衝突的問題

問題描述 軟體同時整合兩種ipc的sdk時,遇到dll同名的情況,因此在呼叫時會出現衝突的情況。解決方法如下 採用動態載入dll庫的方法。include common.h include iostream include tchar.h include windows.h using namespa...

SSH 三步解決免密登入

本地客戶端生成公私鑰 一路回車預設即可 ssh keygen上面這個命令會在使用者目錄.ssh資料夾下建立公私鑰 cd sshls下建立兩個金鑰 id rsa 私鑰 id rsa.pub 公鑰 ssh copy id i ssh id rsa.pub root 192.168.235.22上面這條命...