解決MSB3247 - 發現同一依賴程序集的不一樣版本之間存在衝突

在使用msbuild進行編譯時,.NET 3.5解決方案最終出現此警告。 app

有時NDepend可能有所幫助,但在這種狀況下,它沒有提供任何進一步的細節。 像Bob同樣,我最終不得不在ILDASM中打開每一個程序集,直到找到引用舊版依賴程序集的程序集。 編輯器

我確實嘗試使用VS 2010 Beta 2中的MSBUILD(由於Connect文章代表這​​已經在下一版本的CLR中獲得修復)可是它沒有提供任何更多細節(可能在Beta 2後修復) ide

有更好的(更自動化的)方法嗎? 工具


#1樓

爲默認的ASP.NET MVC 4 beta生成此警告, 請參見此處 ui

在,能夠經過手動編輯項目的.csproj文件來消除任何強制轉換此警告。 spa

修改........:參考包含=「System.Net.Http」 調試

閱讀......:參考包含=「System.Net.Http,Version = 4.0.0.0」 code


#2樓

如前所述在這裏 ,你須要刪除未使用的引用,並警告會去。 rem


#3樓

將「MSBuild項目構建輸出詳細程度」更改成「詳細」或更高版本。 爲此,請按照下列步驟操做: get

  1. 打開「選項」對話框(「 工具」 - >「選項...」 )。
  2. 在左側樹中,選擇「 項目和解決方案」節點,而後選擇「 生成並運行」
    • 注意:若是此節點未顯示,請確保選中「 顯示全部設置 」對話框底部的複選框。
  3. 在出現的工具/選項頁面中,根據您的版本將MSBuild項目構建輸出詳細級別設置爲適當的設置:

  4. 構建項目並查看輸出窗口。

查看MSBuild消息。 ResolveAssemblyReferences任務(MSB3247發起的任務)應該能夠幫助您調試此特定問題。

個人具體狀況是對SqlServerCe的錯誤引用。 見下文。 我有兩個項目引用了兩個不一樣版本的SqlServerCe。 我用舊版本去了項目,刪除了引用,而後添加了正確的引用。

Target ResolveAssemblyReferences:
    Consider app.config remapping of assembly "System.Data.SqlServerCe, ..." 
        from Version "3.5.1.0" [H:\...\Debug\System.Data.SqlServerCe.dll] 
        to Version "9.0.242.0" [C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\System.Data.SqlServerCe.dll]
        to solve conflict and get rid of warning.
    C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets : 
        warning MSB3247: Found conflicts between different versions of the same dependent assembly.

您沒必要打開每一個程序集來肯定引用程序集的版本。

  • 您能夠檢查每一個參考的屬性。
  • 打開項目屬性並檢查「引用」部分的版本。
  • 使用文本編輯器打開項目。
  • 使用.Net Reflector。

#4樓

沒有考慮(內部)依賴關係的最簡單方法:

  1. 打開「Solution Explorer」。
  2. 點擊「顯示全部文件」
  3. 展開「參考」
  4. 您會看到一個(或多個)引用的圖標與其餘引用略有不一樣。 一般,它是黃色框,建議你記下它。 只需刪除它。
  5. 添加引用並編譯代碼。
  6. 就這樣。

就我而言,MySQL引用存在問題。 不知何故,我能夠在全部可用引用列表下列出它的三個版本。 我按照上面的過程1到6進行了操做,它對我有用。


#5樓

我發現(至少在Visual Studio 2010中)您須要將輸出詳細程度設置爲至少詳細以便可以發現問題。

多是個人問題是之前做爲GAC參考的引用,但在個人機器從新安裝後再也不是這種狀況。

相關文章
相關標籤/搜索