2012-03-03 10 views
6

Acabo de instalar VS 11 en Windows 8. Cuando obtuve la última versión de una solución creada con VS 2010, y luego la construí, recibo este error (en VS 11):System.Tuple definido en ensamblados múltiples

El tipo predefinido 'System.Tuple' se define en varios ensambles en el alias global; utilizando la definición de 'C: \ Archivos de programa (x86) \ Referencia Asambleas \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll'

no he sido capaz de encontrar una respuesta a través de Google . Y no sé lo que es el "alias global". Esas palabras son demasiado genéricas para encontrarlas a través de una búsqueda en Google.

VS 11 hizo automáticamente algunos cambios, por lo que deshice los, recompilado, y obtuve el mismo error.

No estoy seguro de qué hacer. ¿Alguien sabe cómo resolver este error? ¿Y cuál es el alias global?

Editar - Estas son las referencias que existen actualmente en el proyecto

Intenté suprimir las referencias que no fueron utilizados, pero yo todavía tengo el error.

enter image description here

Editar 2 - RESPUESTA

Este System.Tuple, dentro del conjunto de Raven, entra en conflicto con el .NET 4,0 System.Tuple. Gracias a Christopher Currens por explicar esto en su respuesta.

enter image description here

+0

El alias del espacio de nombres global es 'global ::'. Eso no va a ayudar. Documente la lista de ensambles en el nodo Referencias. O simplemente ignore la advertencia y espere la versión RTM. –

+0

¿Qué sucede si busca System.Tuple en el navegador de objetos? Debería mostrarle todos los ensamblajes en su solución que lo definen. –

Respuesta

5

Parece que Raven.Abstractions es un ensamblado .NET 3.5, en lugar de una referencia .NET 4.0. Si nos fijamos en el código fuente for RavenDB Here, observará que define una clase Tuple<T, U> si está siendo desarrollado para .NET 3.5.

Debe haber actualizado su proyecto de .NET 3.5 a .NET 4.0 en algún momento, porque también noto que tiene una referencia a System.Core. En .NET 4, System.Core es referencia por defecto y para que la referencia en su proyecto sea redundante.

Mi sugerencia es que encuentre todos los ensamblados a los que ya hace referencia en su proyecto y los reemplace con .NET 4 versiones, si están disponibles. Sé que .NET tiene esa compatibilidad adicional, ya que permite cargar dos versiones del tiempo de ejecución en un proceso al mismo tiempo, pero no puedo imaginar que no afecte el rendimiento en algún nivel, incluso si solo un poquito Sin embargo, el tiempo de ejecución de .NET 4 es superior en muchos aspectos, específicamente en el gran montón de objetos. Supongo que estoy despotricando un poco. Simplemente actualice los ensamblajes que pueda a 4.0 o cambie la versión de su proyecto a 3.5.

+0

Acabo de encontrar System.Tuple definido dentro de Raven.Abstractions-3.5 usando el navegador de objetos. Entonces eso significa que cuando actualicé a 4.0, entró en conflicto con el Raven 3.5 System.Tuple. ¡Gracias! –

3

Sólo han resuelto mismo problema. Parecía que tenía una versión codificada de FSharp.Core en uno de mis proyectos (era proyecto C#, por cierto). Después de cambiar <Reference Include="FSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> a <Reference Include="FSharp.Core" /> advertencia se ha ido.

+0

Gracias, pero no tengo esa referencia. De hecho, no tengo ninguna referencia que sea específica de la versión. –

0

Gracias, tengo

  • descargado el proyecto, a continuación,
  • clic derecho> Editar y poner
  • <Reference Include="FSharp.Core" />

    como usted ha dicho.

¡Advertencias ha desaparecido!

1

Se encuentra con el mismo problema. Esta vez mi proyecto está en .NET 4.5 y una referencia de .NET 3.5 dll. Falló la compilación porque hay varios ensambles para system.tuple. Para evitar esto, mi colega sugirió cambiar los alias del proyecto de referencia (en propiedad) de "global" a otra cosa. Eso arregla la advertencia/error de compilación.

Cuestiones relacionadas