我刚刚在Windows 8中安装了VS 11.当我获得使用VS 2010构建的最新解决方案,然后构建它时,我收到此错误(在VS 11中):
预定义类型'System.Tuple'在多个程序集中定义 在全球化别名中;使用'c:\ Program Files中的定义 (86)\参考 组件\微软\ Framework.NETFramework \ V4.0 \ mscorlib.dll中“
我无法通过Google找到答案。我不知道“全球别名”是什么。这些单词过于通用,无法通过Google搜索找到。
VS 11自动做了一些更改,所以我解除了那些,重新编译,并得到了同样的错误。
我不知道该怎么做。任何人都知道如何解决此错误?什么是全球别名?
编辑 - 这些是项目中当前存在的参考
我尝试删除未使用的引用,但仍然出现错误。
编辑2 - 答案
Raven程序集中的System.Tuple
与.NET 4.0 System.Tuple
冲突。感谢Christopher Currens在他的回答中解释这一点。
答案 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)
谢谢,我有
<Reference Include="FSharp.Core" />
警告消失了!