System.Tuple определен в нескольких сборках - PullRequest
6 голосов
/ 03 марта 2012

Я только что установил VS 11 в Windows 8. Когда я получил последнее решение, созданное с VS 2010, а затем собрал его, я получаю эту ошибку (в VS 11):

Предопределенный тип 'System.Tuple' определен в нескольких сборках в глобальном псевдониме;используя определение из 'c: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll'

Я не смог найти ответ черезGoogle.И я не знаю, что такое «глобальный псевдоним».Эти слова слишком общие, чтобы их можно было найти в поиске Google.

VS 11 автоматически внес некоторые изменения, поэтому я отменил их, перекомпилировал и получил ту же ошибку.

Я не уверен, чтосделать.Кто-нибудь знает, как решить эту ошибку?И что такое глобальный псевдоним?

Редактировать - это ссылки, которые в настоящее время существуют в проекте

Я пытался удалить ссылки, которые не использовались, но я все еще получилошибка.

enter image description here

Редактировать 2 - ОТВЕТ

Этот System.Tuple в сборке Raven конфликтует с .NET 4.0System.Tuple.Спасибо Кристоферу Урансу за объяснение этого в его ответе.

enter image description here

Ответы [ 4 ]

5 голосов
/ 12 августа 2012

Похоже, Raven.Abstractions - это сборка .NET 3.5, а не ссылка на .NET 4.0.Если вы посмотрите на исходный код для RavenDB Здесь , вы заметите, что он определяет класс 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.

3 голосов
/ 31 июля 2012

Просто решили ту же проблему.Оказалось, что у меня была жестко закодированная версия FSharp.Core в одном из моих проектов (это был проект C #, кстати).После изменения <Reference Include="FSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> на <Reference Include="FSharp.Core" /> предупреждение исчезло.

1 голос
/ 09 января 2014

столкнуться с той же проблемой. На этот раз мой проект находится в .NET 4.5 и ссылочной .NET 3.5 dll. Сборка не удалась, поскольку для system.tuple существует несколько сборок. Чтобы обойти это, мой коллега предложил изменить псевдонимы ссылочных проектов (в свойствах) с «глобальных» на другие. Это исправляет предупреждение / ошибку сборки.

0 голосов
/ 07 мая 2013

Спасибо, у меня

  • выгружен проект, затем
  • щелкните правой кнопкой мыши> Изменить и введите
  • <Reference Include="FSharp.Core" />

    как ты и сказал.

Предупреждения пропали!

...