metodo extension extended enum definicion custom c# .net-3.5 extension-methods

extended - extension methods c#



Error al usar métodos de extensión en C# (16)

¿A qué versión de .NET estás apuntando? La clase ExtensionAttribute se envía en System.Core.dll (.NET 3.5), pero puede volver a declararlo usted mismo si desea utilizar métodos de extensión en .NET 2.0 / 3.0 (obviamente, con C # 3.0). De hecho, LINQBridge hace esto.

[actualización] Sin embargo, estoy un poco confundido, porque el error que debería ver es:

Error 1 No se puede definir un nuevo método de extensión porque el compilador requerido tipo ''System.Runtime.CompilerServices.ExtensionAttribute'' no se puede encontrar. ¿Echas de menos una referencia a System.Core.dll? [corté algunas cosas del camino]

Encontré un problema que me hace pensar que hay errores en el marco 3.0. Cuando intento utilizar métodos de extensión, aparece el siguiente error:

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

Al usar este código simple:

public static class StringUtils { static void TestExtension(this String targetString) { } }

La única forma de hacer que este error de compilación desaparezca es agregar el siguiente código:

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

Han pasado unos meses desde que utilicé los métodos de extensiones, pero estoy bastante seguro de que no tenía que hacer esto. ¿Alguien más se ha encontrado con este problema?


¿Es este un proyecto de sitio web, por casualidad? Intente cambiar el marco de destino de .NET 3.5 a una versión anterior, y luego vuelva a .NET 3.5.


Edite su csproj y asegúrese de que esas referencias estén incluidas (no funcionará por simple ''agregar referencia'' ...):

<Reference Include="System" /> <Reference Include="System.Core" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> <Reference Include="Microsoft.CSharp" /> <Reference Include="System.Data" /> <Reference Include="System.Net.Http" /> <Reference Include="System.Xml" />


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


Este problema es causado por una referencia incorrecta a la versión 2 de System.Core. Esto normalmente se produce cuando se actualiza desde una versión anterior de .NET a .NET 3.5. Si es un sitio web en el que experimenta este problema, puede solucionarlo siguiendo estos pasos:

1) En web.config agregue una referencia a System.Core v3.5:

<assemblies> <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> </assemblies>

2) En web.config agregue lo siguiente como elemento secundario de la configuración:

<configuration> <!--Some other config--> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Core" publicKeyToken="B77A5C561934E089"/> <bindingRedirect oldVersion="2.0.0.0-2.1.0.0" newVersion="3.5.0.0"/> </dependentAssembly> </assemblyBinding> </configuration>


Las extensiones se introducen en C # 3.0, que por otro lado se introdujo en .NET 3.5, por lo que no se puede usar directamente en .NET 3.0.


Me encontré con este problema yo mismo. En mi caso, fue porque convertí un proyecto VS 2005 / .Net 2.0 a un proyecto VS 2008 / .Net 3.5. La herramienta de conversión mantuvo referencias a System.Core 2.0, y no pude encontrar una manera fácil de cambiar las referencias a System.Core 3.5.

Terminé recreando el proyecto en VS 2008 desde cero, y fue creado con las referencias adecuadas a System.Core 3.5


Para referencia continua:

He luchado exactamente este mismo mensaje de error durante las últimas dos horas en el marco de trabajo de .NET 4.0 y finalmente lo he rastreado hasta una referencia corrupta al dll de Microsoft.CSharp. Fue un tema tan frustrantemente simple. Eliminé la referencia ofensiva y agregué una referencia "nueva" a esa dll que estaba ubicada en:

C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0/Microsoft.CSharp.dll

Con suerte, esto le ahorrará a otra persona el tiempo y el agravante de rastrear una solución a este mensaje de error.


Pruebe: Proyecto, Agregar referencia, encuentre System Core 3.5.0.0 en la lista y OK para agregarlo.


Solo apunte su proyecto VS a .NET framework 3.5 y superior. Lo más probable es que hayas convertido tu proyecto de una versión anterior.


Su marco no es lo suficientemente alto para los métodos de extensión.
Es un truco para hacer que los métodos de extensión funcionen sin estar en 3.5


Tenía una versión de Elmah.Sandbox que tenía como objetivo .net 2.0 en un proyecto .Net 4.0 existente. Agregué un método de extensión a mi proyecto y la construcción falló con el mensaje de error "Miembro requerido del compilador faltante".

El dll de Elmah.Sandbox se incluyó como parte de una versión anterior de ElmahR. Una vez que esto fue eliminado, todo se construyó de nuevo.


Tengo exactamente el mismo problema. El error System.Runtime.CompilerServices.ExtensionAttribute..ctor es bastante críptico, y podría significar una serie de cosas diferentes.

Sin embargo, para mí se redujo al hecho de que estoy usando Newtonsoft.Json.Net . Newtonsoft.Json.Net20.dll la referencia al archivo Newtonsoft.Json.Net20.dll y la volví a agregar. Después de esto, mi solución se construye de nuevo.

Lo más extraño es que cuando intenté descubrir qué era diferente después de este procedimiento al usar Subversion Diff, nada parece haber cambiado.

Así que realmente no sé qué es lo que hace eliminar y volver a agregar esta referencia, pero soluciona mi problema de compilación con este mensaje de error en particular mencionado por el asker.

ACTUALIZACIÓN 1 :

Para aquellos que se encuentren con esto de nuevo, como lo señalaron los comenters, la forma correcta de solucionar esto es descargar el ZIP de Json.Net , y debería haber una versión 3.5, re-referencia 3.5 donde esté usando Json.Net y eliminar la referencia anterior, ya que es probable que haga referencia a un ensamblado que se creó para versiones anteriores de .net.

ACTUALIZACIÓN 2 :

Charlie Flowers señala que las etiquetas DLL NewtonSoft como de 3.5 no funcionan con 3.5. Tienes que usar la DLL que etiquetan como .net 2.0


Tuve el mismo problema en un proyecto de biblioteca de clase que había actualizado de VS 2008 a VS 2010 Beta 2. No había agregado ningún método de extensión al proyecto hasta después de la actualización, entonces empecé a ver el mismo error.

Agregar una clase con el siguiente código al proyecto resolvió el problema:

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

Encontrado el consejo en este blog: http://blog.flexforcefive.com/?p=105


Una referencia System.Core faltante dará estos síntomas.


en VS, haga clic en Proyecto (al lado de Archivo, Editar, Ver), seleccione Propiedades

luego, en la pestaña de la Aplicación (verás que ya estás en 3.5), selecciona Target Framework en 2.0, luego compila (se producirá un error). luego vuelva a ponerlo en 3.5, luego vuelva a compilar, el error desaparecerá

Creo que es solo un pequeño error en Visual Studio, solo engañe al IDE :-)