Der Fehler "Fehlender Compiler erfordert Mitglied" wird mehrmals ausgelöst, fast ohne Änderungen am Code

94

Nachdem ich heute einige Änderungen an einer von mir ausgeführten C # MVC-Site bereitgestellt habe, habe ich einige weitere Änderungen vorgenommen und bin auf diesen Fehler gestoßen:

Fehlender Compiler erforderlich Mitglied System.Runtime.CompilerServices.ExtensionAttribute..ctor

Der Fehler ist etwas vage (abgesehen von der Beschreibung natürlich), da ich keine Datei, Zeile oder Spalte als Referenz habe, sondern nur das Projekt. Außerdem wird der Fehler insgesamt 20 Mal ausgelöst. Ich habe zwischen der Bereitstellung (zu diesem Zeitpunkt war er vollständig funktionsfähig) und jetzt nur drei Änderungen am Code vorgenommen. Ich habe meine Änderungen rückgängig gemacht und es wird immer noch derselbe Fehler ausgegeben, der für mich keinen Sinn ergibt.

Ich habe nicht viele Informationen zu diesem Fehler in SO oder Google gefunden, außer dieser Lösung und ein paar Verweisen auf einige Mono-Projektfehler (ich verwende Mono nicht). Die Lösung, die der oben genannte Typ gibt, erfordert das Hinzufügen einer Klassendefinition, mit der der Compiler die Referenz auflösen kann. Ich möchte dies nicht besonders tun, da ich es bis zu diesem Zeitpunkt nicht tun musste und es meinen Code nur trüben wird.

Nur neugierig, ob jemand schon einmal darauf gestoßen ist. Danke im Voraus!

Jamesmillerio
quelle
1
Scheint, als würden Sie einen C # 3.0-Compiler verwenden, aber mit .NET Framework 2.0 kompilieren. Überprüfen Sie Ihre Baugruppenreferenzen.
dtb

Antworten:

27

Dieser Fehler bedeutet normalerweise, dass entweder Ihr Projekt gegen .NET 2.0 kompiliert wird oder Sie nicht auf die richtige Version von System.Core.dll verweisen

Eine nahezu doppelte Frage finden Sie unter Fehler bei der Verwendung von Erweiterungsmethoden in C #

Robert Levy
quelle
Es stellte sich heraus, dass ich eine schlechte Referenz von einer Assembly hatte, die ich nicht mehr verwendete (Azure). Ich glaube nicht, dass die Azure-Assembly gegen .NET 2.0 kompiliert wurde, aber das Entfernen hat das Problem behoben. Ich bin mir nicht sicher, warum dies zufällig entstanden ist, da ich seit einiger Zeit nichts mehr im Zusammenhang mit meinen Assemblys oder der .Net-Version (4.0) berührt habe. Ach, danke, dass du mich in die richtige Richtung gelenkt hast.
Jamesmillerio
Unity3D setzt den Compiler standardmäßig auf .NET 2 (zum Zeitpunkt des Schreibens). Ändern Sie es in den Player-Einstellungen in die neuere .NET-Version, um dieses Problem zu beheben.
Schatten
230

In meinem Fall lag es daran, dass das Projekt nicht referenzierte Microsoft.CSharp. Nachdem ich einen Verweis auf diese Assembly hinzugefügt hatte, wurde sie problemlos kompiliert.

Mike
quelle
3
Problem gelöst.
Anton Lyhin
16
Mein Problem war ein Unit-Test mit einem dynamischen und einem Expando-Objekt. Microsoft.CSharp zu referenzieren war der Trick. Vielen Dank!
RealPT
1
Ich hatte den dynamischen Typ NewtonSoft usw. In der .NetStandard-Klassenbibliothek: `` `string weatherjson = warte auf GetAsync (url); dynamisches obj = JsonConvert.DeserializeObject (weatherjson); dynamisches Temp = obj.main.temp; `` `Ich habe Nuget Search für Microsoft.CSharp durchgeführt und das installiert. Bibliothek wird jetzt erstellt :) F. Kann ich diese .NetStandard-Bibliothek in der Linux-App unter Berücksichtigung der Microsofct-Referenz verwenden?
David Jones
Danke dir! Aus irgendeinem Grund war mir dies aus der Nachricht nicht ersichtlich! Ich optimiere ein Projekt, das vor langer Zeit geschrieben wurde, und dieses Nachschlagewerk ist erschreckend. Lässt die relative Klarheit von Java schätzen, die ich normalerweise benutze.
Tuntable
82

Ich weiß nicht, ob dies jemand anderes erlebt hat, aber ich gerate plötzlich in diesen Fehler, nachdem ich Code unter Verwendung von dynamicTypen hinzugefügt und WebAPI in ein Projekt integriert habe, das als TypeScript-Anwendung in VS2013 entstanden ist. Durch einfaches Hinzufügen eines Verweises auf Microsoft.CSharp wurde mein Problem behoben.

Hoffe das hilft jemand anderem.

H Boyce
quelle
3
Das war genau mein Problem. Das Hinzufügen von Dynamik brach das Projekt auf mysteriöse Weise.
SouthShoreAK
2
Dasselbe für mich, mit Dynamic mit .NetStandard2.0, musste ich C # Nuget installieren, damit es kompiliert werden konnte
Mahmoud Hanafy
17

Ich bin heute auch in diese Situation geraten. In meinem Fall habe ich in meiner .NET 4.0-Anwendung auf die Newton.Json.Net-DLL v3.5 verwiesen. Mir wurde klar, dass ich diese Bibliothek nicht einmal benutzte. Nachdem ich sie aus meinen Referenzen entfernt hatte, gab es mir keinen Compilerfehler mehr.

Problem gelöst!!!

Bat_Programmer
quelle
2
Das gleiche gilt für mich, Newton.Json.Net DLL hat das Problem verursacht!
Julien Pierre
In meinem Fall war der Grund die falsche NET20-Version von Microsoft AntiXSSLibrary.dll. Ersetzt durch NET35 - der Fehler ist verschwunden.
Denis
7

Der eigentliche Fehler beruht auf der Tatsache, dass Ihre 2.0-Assembly, die den Fehler verursacht, diesen Code enthält:

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

Mit dem obigen Code kann die .NET 2.0-Assembly Erweiterungsmethoden verwenden (siehe Verwenden von Erweiterungsmethoden in .NET 2.0? ). Während es den Compiler verwirrt, wenn Sie auf .NET 4.0 abzielen und auf eine 2.0-Assembly (die den obigen Code enthält) verweisen, enthält die mscorlib.dll (4.0) dieselbe Klasse im selben Namespace.

Ich habe das behoben

  • durch erneutes Kompilieren der ursprünglichen 2.0-Assembly ohne das Attribut Targeting 4.0
  • durch Entfernen der Baugruppe (offensichtlich)
  • durch Hinzufügen eines dritten Erweiterungsattributs zu dem Ziel, das Sie kompilieren (es scheint die referenzierten Definitionen zu überschreiben)
Konsole
quelle
Dies ist genau mein Problem, ich werde Ihre Anweisungen versuchen und zurückschicken.
John Peters
6

Das Schreiben dieses Codes irgendwo in Ihrem Projekt kann Ihr Problem lösen. Für mich geht das

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}
Jalal Ahmadi Tabriz
quelle
Wo schreibst du diesen Code? Sie haben eine Klasse im Stammverzeichnis des Projekts erstellt?
Alex
1
@Alex Ich habe dem Stammverzeichnis meines Projekts eine Klasse namens CompilerService mit dem Code aboce hinzugefügt, und es hat funktioniert. Nett!
Halvard
4

NLog.dll 2.0, auf das aus einem .NET 4.0-Projekt verwiesen wird, kann dies ebenfalls verursachen.

Käse
quelle
NLog für .NET 2.0, auf das von .NET 3.5 verwiesen wird, scheint ähnliche Fehler zu ergeben.
Pedro
3

Wahrscheinlich verwenden Sie das dynamicSchlüsselwort In .NetStandard Class Library Project. In diesem Fall müssen Sie Microsoft.CSharpim Projekt einen Verweis auf die Bibliothek hinzufügen . Hoffe, es wird Ihr Problem lösen.

Towhidul Islam Tuhin
quelle
2

Ich habe keine korrekte Lösung, aber ich werde meinen Datenpunkt hinzufügen:

In meinem Fall wird der Fehler durch Verweisen auf GoogleSearchAPINet20 verursacht

Folgendes passiert:

  • Ich schließe die Lösung, die erstellt
  • Ich öffne die Lösung erneut. Es baut immer noch
  • Sobald ich Änderungen vornehme und versuche zu erstellen, erhalte ich 19 Fehler "Fehlender Compiler erforderlich Mitglied ..."
  • Ich entferne den Verweis auf GoogleSearchAPINet20
  • Ich füge den Verweis auf GoogleSearchAPINet20 wieder hinzu
  • Ich baue die Lösung. Es baut ohne Fehler
  • Ich kann jetzt Codeänderungen vornehmen, andere Aktionen mit der Lösung korrekt erstellen oder ausführen, solange mein Visual Studio geöffnet ist
  • Ich schließe Visual Studio
  • Wiederholen Sie ab Schritt eins

Ich verweise in meiner Lösung überhaupt nicht auf System.Core.dll und mein Zielframework ist .NET 4.

Ich bin an dieser Stelle etwas verärgert ...

Evgeny
quelle
1

Beim Versuch, asynchrone Aufgaben für .NET 4.0 zu verwenden, ist dieser Fehler aufgetreten. Das Aktualisieren von Target Framework auf 4.5.2 hat das Problem behoben.

Eternal21
quelle
1

Ich habe die gleichen Ausnahmen getroffen, nachdem ich einem Winforms-Projekt einige asynchrone Methoden hinzugefügt habe. Ich musste meine .NET-Version von 4 auf 4.5 erhöhen

user8675309
quelle
0

Bei mir tritt das Problem auf, wenn ich in meinem .net4.0-Projekt eine asynchrone Methode mit asynchroner Task-Wartezeit hinzufüge!

Bei früheren Versionen von .NET-Framework 4.5 müssen Sie dieses Paket installieren:

Install-package Microsoft.Bcl.Async pre

oder

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

Weitere Infos zu Nuget oder Nuget

A. Morel
quelle