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


Answers

基本上,當你引用的程序集的“Copy Local”被設置為“True”時,就會發生這種情況,這意味著DLL的副本和你的exe文件一起放在bin文件夾中。

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

我已經得到的方式是將復製本地設置為假裝配項目中的引用。 只適用於需要運行成品的程序集的可執行程序/ Web應用程序。

希望是有道理的!

Question

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

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

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

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




我和我的一個項目有同樣的問題,但是,以上都沒有幫助解決這個警告。 我檢查了詳細的構建日誌文件,我使用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)

我希望上面顯示的是我的意思,花了我幾個小時的時間來發現,所以希望別人也會受益。




我有同樣的問題,我通過在web.config中更改以下解決方案。

它發生在我身上,因為我正在運行使用Newtonsoft.Json 4.0的應用程序

從:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

至:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>



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

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

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




也有這個問題 - 在我的情況下,它是由一些引用設置為true的“特定版本”屬性造成的。 在這些引用上將其更改為false可以解決問題。




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




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