6

Ho appena installato VS 11 in Windows 8. Quando ho ottenuto l'ultima soluzione costruita con VS 2010, quindi lo ho generato, sto ricevendo questo errore (in VS 11):System.Tuple definito in più assiemi

Il tipo predefinito "System.Tuple" è definito in più assiemi nell'alias globale; utilizzando la definizione di 'c: \ Program Files (x86) \ Riferimento Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll'

non sono stato in grado di trovare una risposta tramite Google . E non so quale sia lo "alias globale". Quelle parole sono troppo generiche per trovare tramite una ricerca su Google.

VS 11 ha apportato automaticamente alcune modifiche, quindi ho annullato quelle, ricompilato e ottenuto lo stesso errore.

Non sono sicuro di cosa fare. Qualcuno sa come risolvere questo errore? E qual è l'alias globale?

Edit - Questi sono i riferimenti che esistono attualmente nel progetto

Ho provato a cancellare i riferimenti che non sono stati utilizzati, ma ho ancora ottenuto l'errore.

enter image description here

Edit 2 - RISPOSTA

Questo System.Tuple, all'interno del gruppo di Raven, i conflitti con il .NET 4.0 System.Tuple. Grazie a Christopher Currens per averlo spiegato nella sua risposta.

enter image description here

+0

L'alias del namespace globale è 'global ::'. Questo non ti aiuterà. Documentare l'elenco degli assembly nel nodo References. Oppure ignora l'avviso e attendi la versione RTM. –

+0

Cosa succede se si cerca nel browser degli oggetti System.Tuple? Dovrebbe mostrare tutti gli assembly nella soluzione che lo definiscono. –

risposta

5

Sembra che Raven.Abstractions sia un assembly .NET 3.5 anziché un riferimento a .NET 4.0. Se si guarda il codice sorgente for RavenDB Here, si noterà che definisce una classe Tuple<T, U> se è stata creata per .NET 3.5.

È necessario aver aggiornato il progetto da .NET 3.5 a .NET 4.0 a un certo punto, perché noto anche che si ha un riferimento a System.Core. In .NET 4, System.Core è di riferimento per impostazione predefinita e quindi il riferimento nel progetto è ridondante.

Il mio suggerimento è di trovare tutti gli assembly che si stanno già facendo riferimento nel progetto e di sostituirli con .NET 4 versioni, se disponibili. So che .NET ha quella compatibilità extra, in quanto consente di caricare contemporaneamente due versioni del runtime in un processo, ma non posso immaginare che ciò non influenzi le prestazioni su alcuni livelli, anche se solo un pochino. Il runtime .NET 4 è tuttavia superiore in molti modi, in particolare l'heap di oggetti di grandi dimensioni. Immagino che stia scherzando un po '. Basta aggiornare gli assemblaggi a 4.0, oppure cambiare la versione del progetto a 3.5.

+0

Ho appena trovato System.Tuple definito in Raven.Abstractions-3.5 utilizzando il browser degli oggetti. Ciò significa che quando ho aggiornato a 4.0, è in conflitto con il Raven 3.5 System.Tuple. Grazie! –

3

Proprio hanno risolto stesso problema. Sembrava che avessi la versione hardcoded di FSharp.Core in uno dei miei progetti (era il progetto C#, btw). Dopo aver modificato <Reference Include="FSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> a <Reference Include="FSharp.Core" />, l'avviso è stato rimosso.

+0

Grazie, ma non ho quel riferimento. In realtà, non ho riferimenti specifici per la versione. –

0

Grazie, ho

  • scaricato il progetto, poi
  • tasto destro> Modifica, e mettere
  • <Reference Include="FSharp.Core" />

    come hai detto.

Avvertimenti andati!

1

Eseguire lo stesso problema. Questa volta il mio progetto è in .NET 4.5 e un dll .NET 3.5 di riferimento. Ha fallito la compilazione perché ci sono più assembly per system.tuple. Per ovviare a questo, il mio collega ha suggerito di cambiare gli alias del progetto di riferimento (in proprietà) da "globale" a qualcos'altro. Questo corregge l'avviso/errore di build.