Pregunta

Entonces, (aparentemente) de la nada, mi proyecto comienza a recibir la advertencia del compilador 1685:

  

El tipo predefinido   'System.Runtime.CompilerServices.ExtensionAttribute'   Se define en múltiples ensamblajes en   el alias global; usando definición   de 'c: \ Archivos de programa \ Referencia   Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll '

Perplejo, investigué el artículo de MSDN para averiguar su causa. Aquí está la información que encontré:

  

Referencia de Visual C #: Errores y   Advertencias del compilador de advertencia (nivel 1)   CS1685

     

Mensaje de error El tipo predefinido   'System.type name' está definido en   Montajes múltiples en el global.   alias; usando la definición de 'Archivo   Nombre '

     

Este error se produce cuando un predefinido   tipo de sistema como System.int32 es   encontrado en dos asambleas. Una forma esta   puede suceder es si estás haciendo referencia   mscorlib desde dos lugares diferentes,   como tratar de ejecutar the.Net   Framework versiones 1.0 y 1.1   lado a lado.

     

El compilador utilizará la definición   De solo una de las asambleas. los   el compilador busca solo alias globales,   no busca bibliotecas definidas   /referencia. Si has especificado   / nostdlib, el compilador buscará   Para Objeto, y en el futuro inicio.   todas las búsquedas de tipos predefinidos en   el archivo donde se encuentra el objeto.

Ahora realmente me estoy rascando la cabeza.

  1. No estoy ejecutando dos diferentes versiones de .NET Framework (a menos que cuentes 2.0 y 3.5).

  2. No estoy haciendo referencia a ningún extraño asambleas que me pueden hacer sospechoso.

  3. No recuerdo haber realizado ningún cambio en mi aplicación que pudiera estimular este cambio.

  4. He verificado que todos los componentes están orientados a .NET Framework versión v2.0.50727.

Estoy abierto a sugerencias o ideas sobre cómo corregir esto. Trato las advertencias como errores, y me estoy volviendo loco.

Lo que realmente me molesta de esto es que no sé por qué está ocurriendo. Las cosas que suceden deben tener una causa discernible, y debo saber por qué sucedieron. Si no puedo explicarlo, no puedo remediarlo con precisión. La conjetura nunca es satisfactoria.

La aplicación es sencilla, consta de una biblioteca de clases y una aplicación de formularios de Windows.

  • Una DLL de biblioteca de clases de C # que proporciona una funcionalidad básica que encapsula el acceso a la base de datos. Esta DLL hace referencia a los siguientes componentes:

    • sistema
    • System.Core
    • System.Core.Data
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq
  • Una aplicación de Windows Forms C # que proporciona la interfaz de usuario. Esta aplicación hace referencia a los siguientes componentes:

    • CleanCode
    • CleanCodeControls (ambos proporcionan compatibilidad con el editor de sintaxis y están construidos localmente contra .NET 3.5).
    • LinqBridge
    • Roswell.Framework (la biblioteca de clases arriba)
    • sistema
    • System.Core
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Deployment
    • System.Design
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq

Avíseme si necesita más información y con gusto se la proporcionaré.

¿Fue útil?

Solución

LINQBridge me hace sospechar de inmediato. Todo el propósito de esto es proporcionar atributos / métodos de extensión, etc. para los usuarios 2.0. Si tiene 3.5 (System.Core.dll), no use LINQBridge. Si do necesita LINQBridge en 3.5 por alguna razón poco clara (y no puedo pensar en una), es posible que tenga que usar un alias externo. Pero realmente dudo que lo necesites!

Otros consejos

Otra forma fácil de verificar: En tu código, usa temporalmente la clase en algún lugar. Ejemplo:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

Al construir, esto generará un error:

  

El tipo 'System.Runtime.CompilerServices.ExtensionAttribute' existe   en ambos 'c: \ Archivos de programa \ Referencia   Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll 'and .....

Y le mostrará inmediatamente las 2 fuentes que causan el conflicto.

Marc es casi seguro que es correcto. Aquí hay una forma de verificar

  1. Abrir Reflector.exe
  2. Agregar todos los ensamblados que no son del sistema
  3. F3 y busca el atributo de extensión

Si aparece en algún lugar que no sea System.Core, entonces sabrás de dónde viene.

Otra solución para este problema es usar un alias global para todo el ensamblaje:

Referencia - > Propiedades - > Alias ??- > Reemplazar 'global' con otra cosa

FYI: Tuve el mismo problema y pude resolverlo al usar Resharper's " Optimize References " comando, y luego eliminar todas las referencias no utilizadas. No estoy completamente seguro de por qué que funcionó, pero funcionó.

Otra solución para este problema = > Haga clic derecho en el proyecto - > Propiedades - > Construir - > Trate las advertencias como errores - > Ninguno

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top