System.Tuple在多个程序集中定义

时间:2012-03-03 03:53:02

标签: .net .net-4.0 compiler-errors visual-studio-2012 .net-4.5

我刚刚在Windows 8中安装了VS 11.当我获得使用VS 2010构建的最新解决方案,然后构建它时,我收到此错误(在VS 11中):

  

预定义类型'System.Tuple'在多个程序集中定义   在全球化别名中;使用'c:\ Program Files中的定义   (86)\参考   组件\微软\ Framework.NETFramework \ V4.0 \ mscorlib.dll中“

我无法通过Google找到答案。我不知道“全球别名”是什么。这些单词过于通用,无法通过Google搜索找到。

VS 11自动做了一些更改,所以我解除了那些,重新编译,并得到了同样的错误。

我不知道该怎么做。任何人都知道如何解决此错误?什么是全球别名?

编辑 - 这些是项目中当前存在的参考

我尝试删除未使用的引用,但仍然出现错误。

enter image description here

编辑2 - 答案

Raven程序集中的System.Tuple与.NET 4.0 System.Tuple冲突。感谢Christopher Currens在他的回答中解释这一点。

enter image description here

4 个答案:

答案 0 :(得分: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具有额外的兼容性,因为它允许同时在一个进程中加载​​两个版本的运行时,但我无法想象它在某个级别上不会影响性能 / em>,即使只是一点点。 .NET 4运行时在很多方面都是优越的,特别是大对象堆。我想我有点咆哮。只需更新4.0到哪些程序集,或将项目版本更改为3.5。

答案 1 :(得分:3)

刚刚解决了同样的问题。看来我在我的一个项目中有硬编码的FSharp.Core版本(它是C#项目,顺便说一下)。改变之后     <Reference Include="FSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /><Reference Include="FSharp.Core" />警告消失了。

答案 2 :(得分:1)

遇到同样的问题。这次我的项目是在.NET 4.5和引用.NET 3.5 dll。它失败了构建,因为system.tuple有多个程序集。为了解决这个问题,我的同事建议将引用项目的别名(在属性下)从“全局”更改为其他内容。这修复了构建警告/错误。

答案 3 :(得分:0)

谢谢,我有

  • 卸载项目,然后
  • 右键单击&gt;编辑,然后输入
  • <Reference Include="FSharp.Core" />

    像你说的那样。

警告消失了!