2012-03-03 20 views
6

我剛剛在Windows 8中安裝了VS 11。當我得到了使用VS 2010構建的最新解決方案,然後構建它時,出現此錯誤(在VS 11中):在多個程序集中定義的系統.Tuple

預定義類型'System.Tuple'在全局別名中的多個程序集 中定義;使用定義從 'C:\ Program Files文件 (x86)的\參考 大會\微軟\ Framework.NETFramework \ V4.0 \ mscorlib.dll中'

我一直沒能找到通過谷歌的答案。我不知道「全球化」是什麼。這些詞太籠統了,無法通過Google搜索找到。

VS 11自動做了一些修改,所以我解開了這些,重新編譯,並得到了相同的錯誤。

我不知道該怎麼做。任何人都知道如何解決這個錯誤?什麼是全球別名?

編輯 - 這些都是目前在項目

存在我嘗試刪除未使用的引用,但我仍然得到了錯誤的引用。

enter image description here

編輯2 - ANSWER

System.Tuple,烏鴉組件內,與.NET 4.0 System.Tuple衝突。感謝Christopher Currens在他的回答中解釋這一點。

enter image description here

+0

全局命名空間別名是'global ::'。這不會有幫助。在「參考」節點中記錄程序集列表。或者只是忽略警告並等待RTM版本。 – 2012-03-03 16:02:41

+0

如果您在對象瀏覽器中搜索System.Tuple,會發生什麼情況?它應該向您顯示解決方案中定義它的所有程序集。 – 2012-08-12 17:07:57

回答

5

它看起來像Raven.Abstractions是一個.NET 3.5程序集,而不是.NET 4.0引用。如果您查看源代碼for RavenDB Here,您會注意到它定義了一個Tuple<T, U>類,如果它是爲.NET 3.5構建的。

在某些時候,您必須已將項目從.NET 3.5更新到.NET 4.0,因爲我還注意到您有一個對System.Core的引用。在.NET 4中,System.Core是默認引用,因此項目中的引用是多餘的。

我的建議是找到您已經在項目中引用的所有程序集,並將其替換爲.NET 4版本(如果可用)。我知道.NET具有這種額外的兼容性,因爲它允許同時在一個進程中加載​​兩個版本的運行時,但我無法想象它不會影響性能某些級別,甚至如果只有一點點。雖然.NET 4運行時在許多方面都很優秀,特別是大型對象堆。我想我有點咆哮。只需將可以裝配的程序集更新到4.0,或將項目版本更改爲3.5即可。

+0

我剛剛發現使用對象瀏覽器在Raven.Abstractions-3.5中定義的System.Tuple。所以這意味着當我升級到4.0時,它與Raven 3.5 System.Tuple衝突。謝謝! – 2012-08-12 17:28:00

3

就已經解決了同樣的問題。似乎我在我的一個項目中使用了FSharp.Core的硬編碼版本(這是C#項目,順便說一句)。更改 <Reference Include="FSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /><Reference Include="FSharp.Core" />警告消失。

+0

謝謝,但我沒有那個參考。實際上,我沒有任何特定於版本的引用。 – 2012-08-12 16:53:03

0

謝謝,我有

  • 卸載項目,然後
  • 右鍵單擊>編輯,並把
  • <Reference Include="FSharp.Core" />

    像你說的。

警告消失了!

1

遇到同樣的問題。這次我的項目在.NET 4.5中,並且引用了.NET 3.5 dll。它的構建失敗,因爲system.tuple有多個程序集。爲解決此問題,我的同事建議將引用項目的別名(屬性下)從「全局」更改爲其他內容。修復了構建警告/錯誤。

相關問題