DotNet 程序集加載了不匹配版本的依賴程序

因爲接口形式的兼容性,這種錯誤更多的是運行時錯誤。

在VS IDE 下使用c# 時,創建新類型對象,對沒有引用到的程序集,那麼一般可以通過“Show potential fixes”來解決

但是有時候,我們會查找一下該對象所在的程序集,然後直接在nuget下載,但是下載哪個版本呢,一般最新的會向下兼容,所以一般我們會選擇最新的。但是這個最新的版本可能在運行時,程序才能發現這個版本不是自己需要的。甚至我們嘗試了Nuget 提供的所有版本後,發現每一個版本都不是程序所需要的。NETStandard.Library 2.03的版本中Net'Newtonsoft.Json 就是這樣一個例子。

創建了一個基於 NETStandard.Library 2.03的Libarary, 使用了JsonConvert 對象,該對象需要的程序集是Net'Newtonsoft.Json,最開始使用Nuget restore 功能直接加載了 Net'Newtonsoft.Json 12.03版本,編譯是沒有問題,調試時一直有這樣的錯誤:

$exception        {"Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.":"Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"}        System.IO.FileNotFoundException

我看了.csproj的reference 以及

 輸出 目錄下的 xx.deps.json,其實寫的都是12.03,並且在nuget package managment 列表窗口根本就找不到12.03.

使用nuget 上提供的其它版本,依然報類似的錯誤。最後只能刪除,還好JsonConvert對象是VS 能夠provide potential fixes,通過這一功能加載了以下版本,並且發現該版本還不在nuget list 裏面。

雖然問題解決了,這並不是一個好的方法,不能保證其它開發者也會有這個路徑。並且後續net standard 升級變化時,這個引用的維護也相當麻煩。

而且有時候,沒有把依賴的程序集加載到工程裏時,那麼vs IDE一般也無法 provide potential fixes.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章