我刚刚在 Windows 8 中安装了 VS 11。当我获得使用 VS 2010 构建的最新解决方案,然后构建它时,我收到此错误(在 VS 11 中):
预定义类型“System.Tuple”在多个程序集中定义
在全局别名中;使用 'c:\Program Files 中的定义
(x86)\参考
程序集\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll'
我无法通过谷歌找到答案。我不知道“全局别名”是什么。这些词太通用了,无法通过谷歌搜索找到。
VS 11 自动进行了一些更改,因此我撤消了这些更改,重新编译,并得到了相同的错误。
我不知道该怎么办。有人知道如何解决这个错误吗?全局别名是什么?
编辑 - 这些是项目中当前存在的引用
我尝试删除未使用的引用,但仍然出现错误。
编辑 2 - 答案
This System.Tuple
,在 Raven 程序集中,与 .NET 4.0 冲突System.Tuple
。感谢 Christopher Currens 在他的回答中解释了这一点。
看起来 Raven.Abstractions 是一个 .NET 3.5 程序集,而不是 .NET 4.0 引用。如果你看一下源代码对于 RavenDB 在这里 https://github.com/ayende/ravendb/blob/master/Raven.Abstractions/Json/Utilities/Tuple.cs,你会注意到它定义了一个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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)