c# - error - advertencia extraña sobre ExtensionAttribute
pragma warning (6)
Recibo una advertencia extraña:
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''
No hay un número de línea, por lo que es difícil averiguar de qué se trata.
El código de error del compilador es CS1685
¿Está utilizando la dll de alguien (o la suya) que implementó este atributo (con exactamente el mismo nombre) como medio para usar algunas características de c # 3.0 en los tiempos de ejecución de .Net 3.5? (Un truco común)
Esta es la causa probable. Dado que está utilizando el correcto (el MS uno en el GAC) esto no es un problema aunque debes buscar al otro y eliminarlo.
Ampliando la respuesta de ShuggyCoUk (correcta)
A decir verdad, no importa qué versión del atributo se use (GAC, 3ra parte, etc.). Lo único que importa es que el compilador C # / VB pueda encontrar algún atributo con el nombre correcto. El atributo no tiene un propósito funcional en el código. Existe puramente para decirle al compilador "hey, este es un método de extensión".
Puede ignorar esta advertencia de forma segura.
El compilador no sabe qué System.Runtime.CompilerServices.ExtensionAttribute
Por lo tanto, está utilizando la definición de c: / Archivos de programa / Conjuntos de referencia / Microsoft / Framework / v3.5 / System.Core.dll ''
A .dll que está utilizando podría tener la misma extensión.
Estoy de acuerdo con ShuggyCoUk en que el mejor curso de acción es tratar de eliminar el dll infractor. Eso puede no ser posible, sin embargo.
Otra forma de resolver la ambigüedad de la que se queja el compilador es cambiar el Alias del dll al que se hace referencia. En su proyecto, en la carpeta Referencias, si hace clic en un dll referenciado, verá la propiedad Aliases. Por defecto, esto es "global", lo que le permite hacer cosas como "global :: SomeNamespace.SomeType". Puede simplemente cambiar el alias a otra cosa.
Esto solucionó un problema que tenía donde necesitaba hacer referencia a Microsoft.Scripting.Core.dll, pero contenía algunos tipos que estaban en conflicto con mscorlib.dll. Cambié la propiedad Aliases para que fuera "ThirdParty" en lugar de "global", y eso corrigió la advertencia.
Tengo el mismo problema.
En mi caso, el problema fue el ensamblado Mono.Cecil.
Al migrar de referencias locales a nuget, cuando agrego referencias de NHibernate, el paquete agrega automáticamente esta referencia.
Esta referencia se eliminó y compiló mi proyecto nuevamente.
Eliminar y ser feliz!
Esta imagen fue tomada de ILSpy ( http://i.stack.imgur.com/Qyd5o.png )
Inicié este error instalando IIS con .NET 3.5 en lugar de 4.5 por accidente.
La reparación era agregar 4.5 de nuevo en "Agregar características ..." en el panel de control.