System.Runtime. CompilerServices. ExtensionAttribute

To jest błąd, który często pojawia się gdy dodajemy metodę extension do Naszego kodu i/lub gdy mieszamy coś  na wersjach framework-a, który jest użyty jako Target Framework

Ostatnio taki błąd pojawił mi się gdy do aplikacji ASP .NET Web Forms dodałem metode extension.

Missing compiler required member  System.Runtime.CompilerServices.ExtensionAttribute

Gdy coś takiego się przydarzy warto wiedzieć 2 rzeczy. Po pierwsze, ten błąd jest wywołany przez to, że system do zmiany Target Framework-ka w Visual-u czasem nie działa tak jak powinien.  Czasem zdarza się, że mimo zmiany docelowego Frameworka z 2.0 na 3.5 to biblioteka  System.Core.dll nadal jest w wersji 2.0.

Po pierwsze błąd ten jest spowodowany tym, że w projekcie na przykład dla framewrok-a 3.5, używamy “extension method” i mamy referencję do biblioteki, która została stworzona w .NET-cie 2.0.

W .NET 2.0 nie było metod extension, dodatkowo podczas rozwoju framework-a jedna klasa zmieniła swoje położenie. Powoduje to, że po dodaniu biblioteki napisanej w .NET 2.0 następuje konflikt nazw.

Po drugie problem też może wystąpić gdy zmieniamy docelowy framework. Co w sumie wynika ze zdania powyżej.

Prostym rozwiązaniem jest dodanie tego  kawałka kodu do projektu:

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

Podsumowując. Jest to dziwne rozwiązanie problemu. Nie za bardzo wiadomo co zrobić z takim kodem i gdzie go umieścić. Często umieszczam go w pliku, gdzie znajduje się klasa z metodami  rozszerzeń.