warning tipo obsoletos miembro están error disable cs0618 c# .net compiler-warnings

tipo - C#Compiler Warning 1685



pragma warning (6)

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

El tipo predefinido ''System.Runtime.CompilerServices.ExtensionAttribute'' se define en varios ensambles en el alias global; utilizando la definición de ''c: / Archivos de programa / Conjuntos de referencia / Microsoft / Framework / v3.5 / System.Core.dll''

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

Referencia de Visual C #: errores y advertencias Advertencia del compilador (nivel 1) CS1685

Mensaje de error El tipo predefinido ''System.type name'' se define en múltiples conjuntos en el alias global; usando la definición de ''Nombre de archivo''

Este error ocurre cuando un tipo de sistema predefinido como System.int32 se encuentra en dos conjuntos. Una forma en que esto puede suceder es si hace referencia a mscorlib desde dos lugares diferentes, como intentar ejecutar las versiones de .Net Framework 1.0 y 1.1 una al lado de la otra.

El compilador usará la definición de solo uno de los ensamblajes. El compilador solo busca alias globales, no busca bibliotecas definidas / referenciadas. Si ha especificado / nostdlib, el compilador buscará Object, y en el futuro comenzará todas las búsquedas de tipos predefinidos en el archivo donde encontró Object.

Ahora estoy realmente rascándome la cabeza.

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

  2. No estoy haciendo referencia a ninguna asamblea extraña que pueda hacerme sospechoso.

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

  4. Comprobé que todos los componentes tienen como objetivo .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 está volviendo loco.

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

La aplicación es sencilla, que consiste en una biblioteca de clases y una aplicación de formularios de Windows.

  • DLL de la biblioteca de clase AC # que proporciona una funcionalidad básica que encapsula el acceso a la base de datos. Este archivo DLL hace referencia a los siguientes componentes:

    • Sistema
    • System.Core
    • System.Core.Data
    • Datos de sistema
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq
  • Aplicación AC # Windows Forms 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 en .NET 3.5).
    • LinqBridge
    • Roswell.Framework (la biblioteca de clases arriba)
    • Sistema
    • System.Core
    • Datos de sistema
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Deployment
    • Diseño de sistemas
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq

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


FYI: Tuve el mismo problema y pude resolverlo usando el comando "Optimizar referencias" de Resharper, y luego eliminé todas las referencias no utilizadas. No estoy completamente seguro de por qué funcionó, pero lo hizo.


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


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

  1. Abra Reflector.exe
  2. Agregue todos los ensamblajes que no sean del sistema
  3. F3 y busca ExtensionAttribute

Si aparece en cualquier lugar además de System.Core, entonces sabrá de dónde viene.


Otra forma fácil de verificar: en su código, use 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 tanto en ''c: / Program Files / Reference Assemblies / Microsoft / Framework / v3.5 / System.Core.dll'' y .....

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


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


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

Referencia -> Propiedades -> Alias ​​-> Reemplazar ''global'' con algo más