[.net] 警告:發現相同相關程序集的不同版本之間存在衝突



Answers

基本上這是在您引用的程序集將“Copy Local”設置為“True”時發生的,這意味著將DLL的副本與您的exe文件一起放入bin文件夾中。

由於Visual Studio也會復制引用程序集的所有依賴關係,因此可能最終引用兩個不同的相同程序集構建。 如果您的項目採用不同的解決方案,則這種情況更可能發生,因此可以單獨編譯。

我已經掌握了它的方法是將復製本地設置為False以便在裝配項目中引用。 只適用於需要運行成品的組件的可執行文件/ Web應用程序。

希望是有道理的!

Question

我目前正在開發一個由20個項目組成的.NET應用程序。 其中一些項目是使用.NET 3.5編譯的,其他一些項目仍然是.NET 2.0項目(目前為止沒有問題)。

問題是,如果我包含一個外部組件,我總是會收到以下警告:

"Found conflicts between different versions of the same dependent assembly".

這個警告究竟意味著什麼,有可能排除此警告(如在源代碼文件中使用#pragma disable)?




=>檢查是否會部分安裝應用程序的某個實例。

=>首先從卸載應用程序中卸載該實例。

=>然後清理,重建,然後嘗試部署。

這解決了我的問題。它也可以幫助你。 最好的祝福。




這實際上取決於你的外部組件。 當您在.NET應用程序中引用外部組件時,它會生成GUID以識別該組件。 當您的某個項目引用的外部組件與另一個組件中的另一個此類組件具有相同的名稱但版本不同時,會發生此錯誤。

當您使用“瀏覽”查找引用並添加錯誤版本的程序集,或者您的代碼庫中的組件版本與您在本地計算機上安裝的版本不同時,有時會發生這種情況。

試著找出哪些項目有這些衝突,從參考列表中刪除組件,然後再次添加它們,確保您指向同一個文件。




這也發生在我身上。 一個dll被引用兩次:直接引用(在引用中)和間接引用(由另一個引用的項目引用)。 我刪除了直接參考,清理和重建解決方案。 問題已修復。




另一件需要考慮和檢查的事情是,確保你沒有任何運行的服務在使用該bin文件夾。 如果他們停止服務並重建解決方案




我與我的一個項目有同樣的問題,但是,以上都沒有幫助解決警告。 我檢查了詳細的構建日誌文件,我使用AsmSpy來驗證我在受影響的解決方案中為每個項目使用了正確的版本,我仔細檢查了每個項目文件中的實際條目 - 沒有任何幫助。

最終發現問題是我在一個項目中引用的其中一個引用的嵌套依賴。 這個參考文獻(A)又需要一個不同版本的(B),它直接從我的解決方案中的所有其他項目中引用。 更新引用項目中的引用解決了它。

Solution A
+--Project A
   +--Reference A (version 1.1.0.0)
   +--Reference B
+--Project B
   +--Reference A (version 1.1.0.0)
   +--Reference B
   +--Reference C
+--Project C
   +--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)

Solution B
+--Project A
   +--Reference A (version 1.1.1.0)

我希望上面的內容能夠說明我的意思,花了我幾個小時找出答案,希望其他人也能受益。




在Visual Studio上,如果右鍵單擊解決方案並且管理nuget包則會出現一個“合併”選項卡,將所有軟件包設置為相同的版本。




Links