引用自這里
什么是程序集清單(Assembly Manifest)?
我們知道,在.net中。程序是以程序集為單位進行打包的,通常一個.exe文件或一個.dll文件就是一個程序集。程序集一般包含了以下幾個部分:
1,程序集清單(或者叫程序集元數據);
2,類型元數據;
3,MSIL代碼;
4,資源(可選項).
如此說來,一般情況下一個.exe或.dll都會包含這此內容。
在程序集中,程序集清單(manifest)是比較重要的,簡單地講它包含了一個程序集需要引用的外部分文件及程序集所包含的內容。其實也就是微軟說的“自我說明”。我們可以通過Visual Studio2003自帶的ILDASM工具查看該清單:
1,打開ILDASM,一般位於:VS2003安裝目錄\SDK\v1.1\Bin\目錄下。
2,打開ILDASM,后選擇文件->打開,將想要查看的程序集加進來。
3,雙擊“MANIFEST”;
打開后會看到如下內容:
![[程序集清單定義與程序集引用不匹配]分析及解決 [程序集清單定義與程序集引用不匹配]分析及解決](/image/aHR0cDovL2Jsb2cuY2hpbmF1bml4Lm5ldC9waG90by8xMTY4MF8wNzEwMTUxNTI5MzguZ2lm.png)
上圖的MANIFEST就是程序清單,像紅線部分標出的是該程序集需要引用到外部文件Infragistics.WebUI.UltraWebGrid.ExcelExport.v3.1,同時也標識了版本號和密鑰。
至此,我們知道是什么是程序集清單以及怎么樣查看一個程序集清單了。下面我們再看看什么是程序集引用。
什么是程序集的引用?
在VS2003下編程的朋友們都知道,當我們用第三方控件,或是別人寫的DLL時,我所要做的就是將其引用進來。引用一個程序集的動作分為兩步:
首先,在項目中將需要的引用的程序集“添加至”引用中。
其次,在源文件件引入(using namespace)別人的命名空間;
如下:
![[程序集清單定義與程序集引用不匹配]分析及解決 [程序集清單定義與程序集引用不匹配]分析及解決](/image/aHR0cDovL2Jsb2cuY2hpbmF1bml4Lm5ldC9waG90by8xMTY4MF8wNzEwMTUxNTQ0NDIuZ2lm.png)
如此將其引用進來以后,我們就可以使用該第三方控件提供的類、方法、資源等功能了。比如我們將“System.Data.SqlClient”引入以后,我們就可以通過其提供的類進行數據庫的連接及操作了。
然后,具體的問題是:
在ABP的程序包管理器控制台中執行Add-Migration Initial,報以下錯誤
未能加載文件或程序集“Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc”或它的某一個依賴項。找到的程序集清單定義與程序集引用不匹配。 (異常來自 HRESULT:0x80131040)
剛開始我以為是程序集引用的問題,因為它的文件顯示是4.2.1版本的,然而引用是4.0.0.0的
但是重新移除再添加還是4.0.0.0,看了它的程序集清單也是4.0.3
清單沒錯那就是引用錯了,但是引用也顯示4.0.0.0,那應該是配置錯了,然后查看EntityFramework配置
將4.1.1.0改為4.0.0.0,問題解決