Dzisiaj po wdrożeniu pewnych zmian w witrynie C # MVC, którą uruchamiam, wróciłem, aby wprowadzić więcej modyfikacji i natknąłem się na ten błąd:
Brak wymaganego elementu członkowskiego kompilatora System.Runtime.CompilerServices.ExtensionAttribute..ctor
Błąd jest nieco niejasny (poza opisem, oczywiście), ponieważ nie daje mi pliku, wiersza lub kolumny do odniesienia, tylko projekt. Ponadto zgłasza błąd łącznie 20 razy. Wprowadziłem tylko trzy zmiany w kodzie od czasu wdrożenia (w tamtym czasie był on całkowicie funkcjonalny) do teraz. Cofnąłem zmiany i nadal rzuca ten sam błąd, który nie ma dla mnie sensu.
Nie znalazłem wielu informacji na temat tego błędu w SO lub Google, poza tym rozwiązaniem faceta i kilkoma odniesieniami do niektórych błędów projektu Mono (nie używam Mono). Rozwiązanie, które podaje powyższy facet, wymaga dodania definicji klasy, która pozwoli kompilatorowi rozwiązać odwołanie. Nie chcę tego robić specjalnie, ponieważ nie musiałem tego robić do tego momentu, a to po prostu zmąci mój kod.
Ciekawe, czy ktoś już to spotkał. Z góry dziękuję!
źródło
Odpowiedzi:
Ten błąd zwykle oznacza, że Twój projekt jest kompilowany na platformie .NET 2.0 lub nie odwołujesz się do poprawnej wersji System.Core.dll
Aby uzyskać prawie zduplikowane pytanie, zobacz błąd podczas używania metod rozszerzających w języku C #
źródło
W moim przypadku było tak, ponieważ projekt nie zawierał odniesień
Microsoft.CSharp
. Kiedy dodałem odniesienie do tego zestawu, skompilowałem się dobrze.źródło
Nie wiem, czy ktokolwiek inny tego doświadczył, ale nagle
dynamic
wpadam w ten błąd po dodaniu kodu wykorzystującego typy i włączeniu WebAPI do projektu, który powstał jako aplikacja TypeScript w VS2013. Samo dodanie odwołania do Microsoft.CSharp rozwiązało mój problem.Mam nadzieję, że to pomoże komuś innemu.
źródło
Dziś też spotkałem się z taką sytuacją. W moim przypadku odwoływałem się do Newton.Json.Net dll v3.5 w mojej aplikacji .NET 4.0. Zdałem sobie sprawę, że nawet nie korzystałem z tej biblioteki, więc kiedy usunąłem ją z moich odniesień, nie dawała mi już błędu kompilatora.
Problem rozwiązany!!!
źródło
Rzeczywisty błąd wynika z faktu, że Twój zestaw 2.0, który powoduje błąd, zawiera następujący kod:
namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } }
Powyższy kod umożliwia zestawowi .NET 2.0 używanie metod rozszerzających (zobacz Używanie metod rozszerzających w .NET 2.0? ). Chociaż myli kompilator, jeśli celujesz w .NET 4.0 i odwołujesz się do zestawu 2.0 (zawierającego powyższy kod), ponieważ mscorlib.dll (4.0) zawiera tę samą klasę w tej samej przestrzeni nazw.
Naprawiłem to
źródło
Napisanie tego kodu gdzieś w projekcie może rozwiązać Twój problem. Mi to pasuje
namespace System.Runtime.CompilerServices { public class ExtensionAttribute : Attribute { } }
źródło
Może to również powodować odwołanie do pliku NLog.dll 2.0 z projektu .NET 4.0.
źródło
Prawdopodobnie używasz
dynamic
słowa kluczowego w projekcie biblioteki klas .NetStandard. Jeśli tak, musisz dodać odwołanie doMicrosoft.CSharp
biblioteki w projekcie. Mam nadzieję, że rozwiąże to twój problem.źródło
Nie mam poprawnego rozwiązania, ale dodam mój punkt danych:
W moim przypadku błąd jest spowodowany odwołaniem się do GoogleSearchAPINet20
Oto, co się dzieje:
W ogóle nie odwołuję się do System.Core.dll w moim rozwiązaniu, a moja platforma docelowa to .NET 4.
Jestem trochę zirytowany w tym momencie ...
źródło
Wystąpił ten błąd podczas próby użycia zadań asynchronicznych względem platformy .NET 4.0. Aktualizacja platformy docelowej do wersji 4.5.2 rozwiązała problem.
źródło
Trafiłem w ten sam zestaw wyjątków po dodaniu niektórych metod asynchronicznych do projektu winForms. Musiałem zmienić wersję .NET z 4 na 4.5
źródło
U mnie problem występuje, gdy dodaję metodę asynchroniczną z asynchronicznym zadaniem oczekującym w moim projekcie .net4.0!
W przypadku poprzednich wersji programu .NET Framework 4.5 należy zainstalować ten pakiet:
lub
więcej informacji o Nuget lub Nuget
źródło