2011-05-31 6 views
52

Hoy después de implementar algunos cambios en un sitio C# MVC que corro, volví a hacer algunas modificaciones más y me encontré con este error:Error de "miembro requerido del compilador faltante" varias veces sin cambios en el código

Missing compiler required member System.Runtime.CompilerServices.ExtensionAttribute..ctor

el error es un poco vago (que no sea su descripción, obviamente), ya que no me da un archivo, una línea o columna para hacer referencia, sólo el proyecto. Además, arroja el error un total de 20 veces. Solo hice tres cambios al código entre el momento en que implementé (era completamente funcional en ese momento) y ahora. Revertí mis cambios y sigue arrojando el mismo error que no tiene sentido para mí.

No he encontrado mucha información sobre este error en SO o Google, que no sea la solución this guys y un par de referencias a algunos errores del proyecto Mono (no estoy utilizando Mono). La solución que ofrece el tipo anterior requiere agregar una definición de clase que permita al compilador resolver la referencia. En particular, no quiero hacer esto porque no he tenido que hacerlo hasta este momento y eso me ensuciará el código.

Simplemente curiosidad si alguien se ha encontrado con esto antes. ¡Gracias por adelantado!

+1

Parece que está utilizando un compilador C# 3.0 pero compilando en contra de .NET Framework 2.0. Verifique las referencias de su conjunto. – dtb

Respuesta

18

Este error suele significar ya sea su proyecto está compilando contra .NET 2.0 o que no se hace referencia a la versión correcta de System.Core.dll

Para una pregunta duplicado cercano, consulte Error when using extension methods in C#

+0

Resultó que tenía una mala referencia de un ensamblaje que ya no estaba usando (Azure). No creo que la asamblea de Azure haya sido compilada contra .Net 2.0, pero eliminarla solucionó el problema. No estoy seguro de por qué esto surgió al azar ya que no he tocado nada relacionado con mis ensamblajes o la versión .Net (4.0) en bastante tiempo. Por desgracia, gracias por señalarme en la dirección correcta. – jamesmillerio

15

Corrí en esta situación también hoy. En mi caso, estaba haciendo referencia a Newton.Json.Net dll v3.5 en mi aplicación .NET 4.0. Me di cuenta de que ni siquiera estaba usando esta biblioteca, así que una vez que la eliminé de mis referencias, ya no me dio el error del compilador.

Problema resuelto !!!

+2

¡Lo mismo para mí, Newton.Json.Net dll causó el problema! –

+0

En mi caso, la razón era la versión NET20 incorrecta de Microsoft AntiXSSLibrary.dll. Reemplazado con NET35: el error desapareció. – Denis

+0

problema resuelto para mí, gracias. –

2

no tengo una solución correcta, pero voy a añadir mi punto de datos:

En mi caso el error es causado por referencia GoogleSearchAPINet20

Esto es lo que sucede:

  • Cierro la solución que construye
  • Abro la solución nuevamente. Todavía construye
  • Tan pronto como hago cualquier cambio y tratar de construir, consigo 19 "Missing compilador requiere miembro ..." errores
  • que eliminar la referencia a GoogleSearchAPINet20
  • agrego volver la referencia a GoogleSearchAPINet20
  • Creo la solución. Se construye sin errores
  • ahora puedo realizar cambios en el código, construir o realizar ninguna otra acción con la solución correcta, siempre y cuando mi Visual Studio está abierto
  • cierro Visual Studio
  • Repita desde el paso uno

No estoy haciendo referencia a System.Core.dll en mi solución en absoluto y mi marco de destino es .NET 4.

Estoy un poco molesto en este punto ...

4

NLog.dll 2.0 a la que se hace referencia desde un proyecto .NET 4.0 puede causar esto también.

+0

NLog para .NET 2.0, al que se hace referencia desde .NET 3.5 parece dar errores similares. – Pedro

5

Escribir este código en algún lugar de su proyecto puede resolver su problema. Funciona para mí

namespace System.Runtime.CompilerServices 
{ 
    public class ExtensionAttribute : Attribute { } 
} 
+0

donde escribe este código? ¿Has creado una clase en la raíz del proyecto? – Alex

+1

@Alex Agregué una clase llamada CompilerService a la raíz de mi proyecto con el código aboce y funcionó. ¡Bonito! – Halvard

6

El error real viene del hecho de que su montaje 2.0 que causa el error contiene este código:

namespace System.Runtime.CompilerServices 
{ 
    public class ExtensionAttribute : Attribute { } 
} 

El código anterior permite la Asamblea .NET 2.0 para utilizar los métodos de extensión (ver Using extension methods in .NET 2.0?). Si bien confunde al compilador si se dirige a .NET 4.0 y hace referencia a una Asamblea 2.0 (que contiene el código anterior), ya que mscorlib.dll (4.0) contiene la misma clase en el mismo espacio de nombres.

i fijo esta

  • compilando el montaje original 2.0 de nuevo sin el atributo focalización 4.0
  • por retirar el conjunto (obviamente)
  • mediante la adición de un tercer atributo de extensión en el objetivo se compila (parece anular las definiciones a las que se hace referencia)
+0

Este es exactamente mi problema, voy a probar sus instrucciones y publicar de nuevo. –

1

Obtuve este error al intentar utilizar tareas asincrónicas contra .NET 4.0. La actualización de Target Framework a 4.5.2 solucionó el problema.

91

En mi caso, fue porque el proyecto no hacía referencia a Microsoft.CSharp. Una vez que agregué una referencia a ese ensamblaje, compiló muy bien.

+3

Esto parece haber funcionado para mí también. –

+3

Esto funcionó para mí, gracias! – sheppe

+2

Resolvió el problema. – Spirit

50

No sé si alguien más ha experimentado esto, pero de repente lloro en este error después de agregar un código utilizando los tipos dynamic e incorporar WebAPI en un proyecto que se originó como una aplicación de TypeScript en VS2013. Simplemente agregando una referencia a Microsoft.CSharp resolvió mi problema.

Espero que esto ayude a alguien más.

+2

Este fue exactamente mi problema. Agregar dinámicas rompió misteriosamente el proyecto. – SouthShoreAK

0

Llegué al mismo conjunto de excepciones después de agregar algunos métodos asíncronos a un proyecto de winforms. Necesitaba topar mi versión .NET de 4 a 4.5

Cuestiones relacionadas