分析「未能載入檔案或程式集」

2021-07-29 16:24:50 字數 1613 閱讀 1200

未能載入檔案或程式集「newtonsoft.json, version=4.5.0.0, culture=neutral, publickeytoken=30ad4fe6b2a6aeed」或它的某乙個依賴項。找到的程式集清單定義與程式集引用不匹配。 (異常來自 hresult:0x80131040)

為什麼我們在專案中引用的是 newtonsoft.json, version=6.0.0.0,但站點出錯,提示找不到 4.5.0.0的版本呢?我們根據提示查詢原因。

通過 regedit 命令開啟登錄檔,找到 hkey_local_machine => software =>microsoft =>fusion 修改或者新增 enablelog ,將值設定為 1.

修改登錄檔後,重新訪問站點,顯示出更多的錯誤資訊

根據程式集載入跟蹤資訊可以看到,程式是先載入system.net.http.formatting, version=4.0.0.0 , formatting 載入 newtonsoft.json, version=4.5.0.0 ,結果就是找不到 newtonsoft.json, version=4.5.0.0 。 那我們再來看看 system.net.http.formatting 為什麼會載入 newtonsoft.json。

我們反編譯 formatting, 察看他的 程式集清單。

我們引用了 4.0.0.0版本的 system.net.http.formatting,它搶先一步載入與之關聯的 json 4.5.0.0 版本。

注:這裡原因只是根據日誌來進行分析的。比如:system.net.http 也引用了 json ,也可能造成該錯誤提示。

1、正確引用各版本dll.

2、維護好 packages.config ,通過 packages.config 來控制dll版本的引用

3、在web.config 的 runtime 節點中強行指定 版本

xmlns="urn:schemas-microsoft-com:asm.v1">

name="newtonsoft.json"

publickeytoken="30ad4fe6b2a6aeed"

culture="neutral" />

oldversion="0.0.0.0-6.0.0.0"

newversion="6.0.0.0" />

dependentassembly>

assemblybinding>

runtime>

未能載入檔案或程式集

不要做a位 修改為b位 的無用功。也不要做用a位 直接呼叫b位 庫這樣複雜 這樣容易出錯的傻事。只需讓a位 b位 的輸入輸出重定向到文字檔案,或修改a位 b位 讓其通過文字檔案輸入輸出。即可很方便地讓a位 b位兩種 之間協調工作。關於.net編譯的目標平台 anycpu,x86,x64 今天將呼叫s...

c 未能載入檔案或程式集

dll檔名與載入時的dll檔名不一致,dll檔案根本不存在,即出現丟失情況,載入dll路徑錯誤,即dll檔案存在,但載入路徑不正確 程式集版本錯誤。我a.dll內部引用的b.dll是1.0版本,而實績提供的b.dll是2.0的版本,所以在winfrom設計介面就報了這個找不到依賴項的錯誤。主要原因是...

未能載入檔案或程式集 系統找不到指定檔案

前言 在網上折騰了很久,終於在一次次嘗試後,把win10 vs2013 cuda8.0平台搭建成功,在檢查cuda編譯器nvcc時,沒有發現問題,但在執行cuda samples裡的各個示例時,都會出現如下錯誤 error msb4062 未能從程式集c progarm file x86 msbul...