Fehler und Warnungen für Sprachfunktionen und -versionen beheben

Dieser Artikel behandelt die folgenden Compiler-Fehler und -Warnungen:

  • CS0171: Das Feld "Name" muss vollständig zugewiesen werden, bevor das Steuerelement an den Aufrufer zurückgegeben wird. Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um das Feld automatisch standardmäßig zu verwenden.
  • CS0188: Das Objekt "this" kann nicht verwendet werden, bevor alle Felder zugewiesen wurden. Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um die nicht zugewiesenen Felder automatisch standardmäßig zu verwenden.
  • CS0843: Die automatisch implementierte Eigenschaft "name" muss vollständig initialisiert sein, bevor die Steuerung an den Aufrufer zurückgegeben wird. Erwägen Sie eine Aktualisierung auf Sprachversion "version", um die Eigenschaft automatisch mit dem Standardwert zu initialisieren.
  • CS1617: Ungültige Option 'option' für /langversion. Verwenden Sie '/langversion:?' zum Auflisten unterstützter Werte.
  • CS1638: "Identifier" ist ein reservierter Bezeichner und kann nicht verwendet werden, wenn der ISO-Sprachversionsmodus verwendet wird.
  • CS1738: Benannte Argumentspezifikationen müssen angezeigt werden, nachdem alle festen Argumente angegeben wurden. Verwenden Sie die Sprachversion 7.2 oder höher, um nicht nachgestellte benannte Argumente zuzulassen.
  • CS8021: Es wurde kein Wert für RuntimeMetadataVersion gefunden. Es wurde keine Assembly gefunden, die System.Object enthält, noch wurde ein Wert für RuntimeMetadataVersion durch Optionen angegeben.
  • CS8022: Das Feature ist in C# 1 nicht verfügbar. Verwenden Sie die Sprachversion 2 oder höher.
  • CS8023: Das Feature ist in C# 2 nicht verfügbar. Verwenden Sie die Sprachversion 3 oder höher.
  • CS8024: Das Feature ist in C# 3 nicht verfügbar. Verwenden Sie die Sprachversion 4 oder höher.
  • CS8025: Das Feature ist in C# 4 nicht verfügbar. Verwenden Sie die Sprachversion 5 oder höher.
  • CS8026: Das Feature ist in C# 5 nicht verfügbar. Verwenden Sie die Sprachversion 6 oder höher.
  • CS8058: Das Feature "Feature" ist experimentell und wird nicht unterstützt. Verwenden Sie "/features:feature" zum Aktivieren.
  • CS8059: Das Feature ist in C# 6 nicht verfügbar. Verwenden Sie die Sprachversion 7 oder höher.
  • CS8107: Das Feature ist in C# 7.0 nicht verfügbar. Verwenden Sie die Sprachversion 7.1 oder höher.
  • CS8192: Die bereitgestellte Sprachversion wird nicht unterstützt oder ungültig: "value".
  • CS8302: Das Feature ist in C# 7.1 nicht verfügbar. Verwenden Sie die Sprachversion 7.2 oder höher.
  • CS8303: Die angegebene Sprachversion "value" darf keine führenden Nullen aufweisen.
  • CS8304: Compilerversion: 'version'. Sprachversion: Version.
  • CS8305: "type" dient nur zu Auswertungszwecken und unterliegt Änderungen oder Entfernungen in zukünftigen Updates.
  • CS8306: Der Tupelelementname "name" wird abgeleitet. Verwenden Sie die Sprachversion 7.1 oder höher, um auf ein Element mit dem abgeleiteten Namen zuzugreifen.
  • CS8314: Ein Ausdruck vom Typ "type" kann nicht von einem Muster vom Typ "Type" in der C#-Version behandelt werden. Verwenden Sie die Sprachversion "Version" oder höher.
  • CS8320: Das Feature ist in C# 7.2 nicht verfügbar. Verwenden Sie die Sprachversion 7.3 oder höher.
  • CS8370: Das Feature ist in C# 7.3 nicht verfügbar. Verwenden Sie die Sprachversion 8 oder höher.
  • CS8371: Feldzielattribute für automatisch implementierte Eigenschaften werden in Sprachversion 7.3 nicht unterstützt. Verwenden Sie Sprachversion 8.0 oder höher.
  • CS8400: Das Feature ist in C# 8 nicht verfügbar. Verwenden Sie die Sprachversion 9 oder höher.
  • CS8401: Um '@$' anstelle von '$@' für eine interpolierte Verbatimzeichenfolge zu verwenden, verwenden Sie bitte die Sprachversion 8.0 oder höher.
  • CS8511: Ein Ausdruck vom Typ 'type' kann nicht mit einem Muster vom Typ 'type' abgeglichen werden. Verwenden Sie Sprachversion 'version' oder höher, damit ein offener Typ einem Konstantenmuster entsprechen kann.
  • CS8627: Ein nullabler Typparameter muss als Werttyp oder nicht nullabler Bezugstyp bekannt sein, es sei denn, die Sprachversion "Version" oder höher wird verwendet. Erwägen Sie, die Sprachversion zu ändern oder eine "Klasse", "Struktur" oder Typeinschränkung hinzuzufügen.
  • CS8630: Ungültiger Wert für 'option': 'value' für die C#-Version. Verwenden Sie die Sprachversion 'version' oder höher.
  • CS8652: Das Feature befindet sich derzeit in der Vorschau und wird nicht unterstützt. Verwenden Sie die Sprachversion "Vorschau", um Vorschaufeatures zu verwenden.
  • CS8701: Die Ziellaufzeit unterstützt keine Standardmäßige Schnittstellenimplementierung.
  • CS8702: "member" kann das Schnittstellenmemm "member" nicht im Typ "type" implementieren, da die Ziellaufzeit die Standardschnittstellenimplementierung nicht unterstützt.
  • CS8703: Der Modifizierer 'modifier' ist für dieses Element in dieser C#-Sprachversion nicht gültig. Bitte verwenden Sie Sprachversion 8.0 oder höher.
  • CS8704: 'type' implementiert kein Schnittstellenmitglied 'member'. "type" kann ein nicht öffentliches Mitglied nicht implizit in C#-Version implementieren. Verwenden Sie die Sprachversion "Version" oder höher.
  • CS8706: Typ kann kein Schnittstellenmemmemm in Typ implementieren, da das Feature in C# 7.3 nicht verfügbar ist.
  • CS8707: Die Ziellaufzeit unterstützt für ein Mitglied einer Schnittstelle nicht die Zugriffsmodifizierer 'protected', 'protected internal' oder 'private protected'.
  • CS8773: Das Feature ist in C# 9 nicht verfügbar. Verwenden Sie die Sprachversion 10 oder höher.
  • CS8830: Die Ziellaufzeit unterstützt keine kovarianten Rückgabetypen in Überschreibungen. Der Rückgabetyp muss 'type' sein, um dem überschriebenen Element 'member' zu entsprechen.
  • CS8831: Die Zielruntime unterstützt keine kovarianten Typen in Überschreibungen. Der Typ muss 'type' sein, um mit dem überschriebenen Member 'member' übereinzustimmen.
  • CS8888: Anrufkonvention "verwaltet" kann nicht mit nicht verwalteten Anrufkonventionsbezeichnern kombiniert werden.
  • CS8889: Die Ziellaufzeit unterstützt keine erweiterbaren oder von der Laufzeitumgebung vorgegebenen Aufrufkonventionen.
  • CS8890: Der Typ 'type' ist nicht definiert.
  • CS8891: Der Typ "Typ" muss öffentlich sein, damit er als Aufrufkonvention verwendet werden kann.
  • CS8904: Ungültige Varianz: Der Typparameter muss für 'member' invariant gültig sein, es sei denn, die Sprachversion 9.0 oder höher wird verwendet.
  • CS8912: Das Erben von einem Datensatz mit einem versiegelten "Object.ToString" wird in C# 9.0 nicht unterstützt. Verwenden Sie die Sprachversion 10.0 oder höher.
  • CS8919: Die Ziellaufzeit unterstützt keine statischen abstrakten Member in Schnittstellen.
  • CS8929: 'method' kann das Schnittstellenmember 'member' nicht im Typ 'type' implementieren, da die Ziellaufzeit keine statischen abstrakten Member in Schnittstellen unterstützt.
  • CS8936: Das Feature ist in C# 10 nicht verfügbar. Verwenden Sie die Sprachversion 11 oder höher.
  • CS8957: Der bedingte Ausdruck ist in Sprachversion 8.0 ungültig, da kein gemeinsamer Typ zwischen 'type' und 'type' gefunden wurde. Um eine zieltypisierte Konvertierung zu verwenden, aktualisieren Sie auf Sprachversion 9.0 oder höher.
  • CS8967: Zeilenumbrüche innerhalb einer nicht wörtlichen interpolierten Zeichenfolge werden in C# 10.0 nicht unterstützt. Verwenden Sie Sprachversion 11.0 oder höher.
  • CS9014: Verwendung der möglicherweise nicht zugewiesenen automatisch implementierten Eigenschaft "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um die Eigenschaft automatisch standardmäßig zu verwenden.
  • CS9015: Verwendung des möglicherweise nicht zugewiesenen Felds "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um das Feld automatisch standardmäßig zu verwenden.
  • CS9016: Verwendung der möglicherweise nicht zugewiesenen automatisch implementierten Eigenschaft "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um die Eigenschaft automatisch standardmäßig zu verwenden.
  • CS9017: Verwendung des möglicherweise nicht zugewiesenen Felds "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um das Feld automatisch standardmäßig zu verwenden.
  • CS9041: "type" erfordert das Compilerfeature "Feature", das von dieser Version des C#-Compilers nicht unterstützt wird.
  • CS9058: Das Feature ist in C# 11 nicht verfügbar. Verwenden Sie die Sprachversion 12 oder höher.
  • CS9064: Die Ziellaufzeit unterstützt keine Referenzfelder.
  • CS9103: "type" wird in einem Modul mit einer nicht erkannten RefSafetyRulesAttribute-Version definiert, wobei "11" erwartet wird.
  • CS9171: Die Ziellaufzeit unterstützt keine Inlinearraytypen.
  • CS9194: Das Argument wird möglicherweise nicht mit dem Schlüsselwort "ref" übergeben. Um 'ref'-Argumente an "in"-Parameter zu übergeben, aktualisieren Sie auf die Sprachversion 12 oder höher.
  • CS9202: Das Feature ist in C# 12.0 nicht verfügbar. Verwenden Sie die Sprachversion 13 oder höher.
  • CS9204: "type" dient nur zu Auswertungszwecken und unterliegt Änderungen oder Entfernungen in zukünftigen Updates. Unterdrücken Sie diese Diagnose, um fortzufahren.
  • CS9211: Das DiagnosticId-Argument für das Attribut "Experimental" muss ein gültiger Bezeichner sein.
  • CS9240: Die Ziellaufzeit unterstützt keine by-ref-ähnlichen Generics.
  • CS9260: Das Feature ist in C# 13.0 nicht verfügbar. Verwenden Sie die Sprachversion 14 oder höher.
  • CS9268: "type" dient nur zu Auswertungszwecken und unterliegt änderungen oder Entfernungen in zukünftigen Updates: 'message'. Unterdrücken Sie diese Diagnose, um fortzufahren.
  • CS9269: UnscopedRefAttribute ist nur in C# 11 oder höher oder bei der Zielbestimmung von net7.0 oder höher gültig.
  • CS9271: Der Typ "Microsoft.CodeAnalysis.EmbeddedAttribute" darf nicht generisch sein, muss intern, kein Dateityp, versiegelt und nicht statisch sein, einen parameterlosen Konstruktor aufweisen, von System.Attribute erben und auf jeden Typ angewendet werden können.
  • CS9327: Das Feature ist in C# 14.0 nicht verfügbar. Verwenden Sie die Sprachversion "Version" oder höher.
  • CS9328: Die Methode "methode" verwendet ein Feature, das derzeit nicht von der asynchronen Laufzeit unterstützt wird. Deaktivieren Sie die asynchrone Laufzeitmethode, indem Sie sie mit "System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)" attributieren.
  • CS9346: Update erfordert explizite Schnittstellenimplementierung, die von der Laufzeit nicht unterstützt wird, ohne die Anwendung neu zu starten.
  • CS9352: Die Ziellaufzeit unterstützt keine erweiterten Layouttypen.

Die Ursache für all diese Fehler und Warnungen besteht darin, dass entweder der Compiler oder die Laufzeit ein feature, das Sie verwenden, nicht unterstützt. Die Lösung hängt davon ab, ob es sich bei dem Problem um ein Konfigurationsproblem bei der Sprachversion, eine nicht übereinstimmende Sprachversion, eine Laufzeiteinschränkung oder eine experimentelle Funktion handelt.

Fehler bei der Sprachversionskonfiguration

  • CS1617: Ungültige Option 'option' für /langversion. Verwenden Sie '/langversion:?' zum Auflisten unterstützter Werte.
  • CS1638: "Identifier" ist ein reservierter Bezeichner und kann nicht verwendet werden, wenn der ISO-Sprachversionsmodus verwendet wird.
  • CS8192: Die bereitgestellte Sprachversion wird nicht unterstützt oder ungültig: "value".
  • CS8303: Die angegebene Sprachversion "value" darf keine führenden Nullen aufweisen.
  • CS8304: Compilerversion: 'version'. Sprachversion: Version.

Diese Fehler deuten darauf hin, dass die <LangVersion> Einstellung in Der Projektdatei oder die -langversion Compileroption ungültig oder nicht mit dem installierten Compiler kompatibel ist.

Korrigieren Sie den <LangVersion> Wert in der Projektdatei auf eine gültige Sprachversionszeichenfolge (CS1617, CS8192, CS8303). Die gültigen Werte sind default, latest, preview, latestMajor oder eine bestimmte Versionsnummer wie 7.3, 8.0, 9.0, 10, 11, 12, 13 oder 14. Fügen Sie keine führenden Nullen in die Versionsnummer ein. Eine vollständige Liste der unterstützten Werte finden Sie unter C#-Sprachversionsverwaltung .

Tipp

Um eine Liste der unterstützten Sprachversionen anzuzeigen, lesen Sie die Tabelle in diesem Artikel nach, kompilieren Sie mit -langversion:?, oder legen Sie vor dem Erstellen <LangVersion>?</LangVersion> vorübergehend in Ihrer Projektdatei fest.

Aktualisieren Sie das .NET SDK auf eine Version, deren Compiler die von Ihnen angegebene Sprachversion unterstützt (CS8304). Jede Version des C#-Compilers unterstützt Sprachversionen bis zu einem bestimmten Maximum. Wenn Sie eine neuere Sprachversion als der Compiler angeben, aktualisieren Sie das SDK.

Entfernen Sie Doppelte Unterstrich-IDs, oder ändern Sie die Sprachversion von ISO-1 oder ISO-2 in eine neuere Version (CS1638). Die ISO-Sprachmodi reservieren Bezeichner mit __ (doppelten Unterstrichen), da sie nicht der ISO-C#-Spezifikation entsprechen.

Note

Der aktuelle C#-Compiler erzeugt cs1638 nicht mehr. Ältere Compiler gaben diesen Fehler aus, wenn die ISO-1- oder ISO-2-Sprachversionen verwendet wurden.

Der Compiler bestimmt seine Standardsprachversion aus dem Zielframework:

Ziel Version C#-Sprachversionsstandard
.NET 11.x C# 15
.NET 10.x C# 14
.NET 9.x C# 13
.NET 8.x C# 12
.NET 7.x C# 11
.NET 6.x C# 10
.NET 5.x C# 9.0
.NET Kern 3.x C# 8.0
.NET Kern 2.x C# 7.3
.NET-Standard 2.1 C# 8.0
.NET-Standard 2.0 C# 7.3
.NET-Standard 1.x C# 7.3
.NET Framework alle C# 7.3

Wenn Sie das LangVersion Element aus der Projektdatei entfernen, verwendet der Compiler den Standardwert für Ihr Zielframework. Sie können auch eine bestimmte Version angeben, um neuere Features zu aktivieren:

Wert Bedeutung
preview Der Compiler akzeptiert jede gültige Sprachsyntax der letzten Vorschauversion.
latest Der Compiler akzeptiert die Syntax der neuesten veröffentlichten Version des Compilers (einschließlich Minor-Version).
latestMajor
oder default
Der Compiler akzeptiert die Syntax der neuesten veröffentlichte Hauptversion des Compilers.
15.0 Der Compiler akzeptiert nur syntax, die in C# 15 oder niedriger enthalten ist.
14.0 Der Compiler akzeptiert nur syntax, die in C# 14 oder niedriger enthalten ist.
13.0 Der Compiler akzeptiert nur Syntax, die in C# 13 oder früher enthalten ist.
12.0 Der Compiler akzeptiert nur Syntax, die in C# 12 oder früher enthalten ist.
11.0 Der Compiler akzeptiert nur Syntax, die in C# 11 oder früher enthalten ist.
10.0 Der Compiler akzeptiert nur Syntax, die in C# 10 oder niedriger enthalten ist.
9.0 Der Compiler akzeptiert nur Syntax, die in C# 9 oder niedriger enthalten ist.
8.0 Der Compiler akzeptiert nur Syntax, die in C# 8.0 oder niedriger enthalten ist.
7.3 Der Compiler akzeptiert nur Syntax, die in C# 7.3 oder früher enthalten ist.
7.2 Der Compiler akzeptiert nur Syntax, die in C# 7.2 oder früher enthalten ist.
7.1 Der Compiler akzeptiert nur Syntax, die in C# 7.1 oder früher enthalten ist.
7 Der Compiler akzeptiert nur Syntax, die in C# 7.0 oder früher enthalten ist.
6 Der Compiler akzeptiert nur Syntax, die in C# 6.0 oder früher enthalten ist.
5 Der Compiler akzeptiert nur Syntax, die in C# 5.0 oder früher enthalten ist.
4 Der Compiler akzeptiert nur Syntax, die in C# 4.0 oder früher enthalten ist.
3 Der Compiler akzeptiert nur Syntax, die in C# 3.0 oder früher enthalten ist.
ISO-2
oder 2
Der Compiler akzeptiert nur Syntax, die in ISO/IEC 23270:2006 C# (2.0) enthalten ist.
ISO-1
oder 1
Der Compiler akzeptiert nur Syntax, die in ISO/IEC 23270:2003 C# (1.0/1.2) enthalten ist.

Weitere Informationen zu den für jede Frameworkversion unterstützten Sprachversionen finden Sie unter "Konfigurieren der Sprachversion " im Abschnitt "Sprachreferenz".

Feature in der Sprachversion nicht verfügbar

  • CS1738: Benannte Argumente müssen angegeben werden, nachdem alle festgelegten Argumente spezifiziert wurden.
  • CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058, CS9202, CS9260, CS9327: Feature ist in C# X nicht verfügbar. Verwenden Sie die Sprachversion Y oder höher.
  • CS8306: Der Name des Tuple-Elements wird abgeleitet. Verwenden Sie die Sprachversion 7.1 oder höher, um auf ein Element mit dem abgeleiteten Namen zuzugreifen.
  • CS8314: Ein Ausdruck vom Typ "type" kann nicht von einem Muster vom Typ "Type" in der C#-Version behandelt werden. Verwenden Sie die Sprachversion "Version" oder höher.
  • CS8371: Auf Felder ausgerichtete Attribute werden für automatische Eigenschaften in Sprachversion 7.3 nicht unterstützt.
  • CS8401: Um '@$' anstelle von '$@' für eine interpolierte Verbatimzeichenfolge zu verwenden, verwenden Sie bitte die Sprachversion 8.0 oder höher.
  • CS8511: Ein Ausdruck vom Typ 'type' kann nicht mit einem Muster vom Typ 'type' abgeglichen werden. Verwenden Sie die Sprachversion 'version' oder höher, um einen offenen Typ mit einem Konstantenmuster abzugleichen.
  • CS8627: Ein nullabler Typparameter muss als Werttyp oder nicht nullabler Bezugstyp bekannt sein, es sei denn, die Sprachversion "Version" oder höher wird verwendet. Erwägen Sie, die Sprachversion zu ändern oder eine "Klasse", "Struktur" oder Typeinschränkung hinzuzufügen.
  • CS8630: Ungültiger Wert für 'option': 'value' für die C#-Version. Verwenden Sie die Sprachversion 'version' oder höher.
  • CS8703: Der Modifizierer 'modifier' ist für dieses Element in dieser C#-Version ungültig.
  • CS8704: 'type' implementiert kein Schnittstellenmitglied 'member'. 'type' kann kein nicht öffentliches Mitglied implizit implementieren.
  • CS8706: Der Typ kann kein Schnittstellenmitglied implementieren, da die Funktion in dieser Version nicht verfügbar ist.
  • CS8904: Ungültige Varianz: Der Typparameter muss für 'member' invariant gültig sein, es sei denn, die Sprachversion 9.0 oder höher wird verwendet.
  • CS8912: Das Erben von einem Datensatz mit einem versiegelten "Object.ToString" wird in C# 9.0 nicht unterstützt.
  • CS8957: Der bedingte Ausdruck ist in der Sprachversion 8.0 ungültig, da kein gemeinsamer Typ für die Typen gefunden wurde.
  • CS8967: Zeilenumbrüche innerhalb einer nicht wörtlichen interpolierten Zeichenfolge werden in C# 10.0 nicht unterstützt.
  • CS9194: Das Argument wird möglicherweise nicht mit dem Schlüsselwort "ref" übergeben. Um 'ref'-Argumente an "in"-Parameter zu übergeben, aktualisieren Sie auf die Sprachversion 12 oder höher.

Diese Fehler deuten alle darauf hin, dass Sie eine Sprachfunktion verwenden, die eine neuere C#-Version erfordert, als die, auf die Ihr Projekt derzeit abzielt. Verwenden Sie eine der folgenden Optionen, um diese Fehler zu beheben:

  • Aktualisieren Sie das Zielframework, damit der Compiler automatisch die erforderliche Sprachversion auswählt. Jedes Zielframework ist einer C#-Standardversion zugeordnet. Zum Beispiel verwendet .NET 8 standardmäßig C# 12, .NET 9 standardmäßig C# 13 und .NET 10 standardmäßig C# 14. Die vollständige Zuordnung finden Sie in der Tabelle unter Konfigurationsfehler der Sprachversion.

  • Legen Sie das <LangVersion> Element in Ihrer Projektdatei auf die erforderliche Version oder höher fest. Fügen Sie beispielsweise zum Aktivieren von C# 12-Features in Ihrer Projektdatei <LangVersion>12</LangVersion> zu einem <PropertyGroup> hinzu.

Wenn Sie kein Upgrade durchführen können, vermeiden Sie das Feature, das den Fehler ausgelöst hat. Die Fehlermeldung benennt das Feature und die erforderliche Version. Die folgende Liste bietet zusätzlichen Kontext für bestimmte Fehler:

  • Verwenden Sie explizit benannte Argumente für alle Argumente, oder führen Sie ein Upgrade auf C# 7.2 oder höher durch, um nicht nachgestellte benannte Argumente (CS1738) zu verwenden.
  • Greifen Sie auf Tupelelemente anhand ihres deklarierten Namens anstelle des abgeleiteten Namens zu, oder führen Sie ein Upgrade auf C# 7.1 oder höher (CS8306) durch.
  • Verwenden Sie $@"..." anstelle interpolierter @$"..." Verbatimzeichenfolgen in C#-Versionen vor 8.0 (CS8401).
  • Fügen Sie explizite Typeinschränkungen zu nullfähigen Typparametern hinzu, oder aktualisieren Sie auf C# 9 oder höher, wodurch diese Anforderung (CS8627) aufgehoben wird.
  • Aktualisieren Sie auf C# 8.0 oder höher, um Nullable-Anmerkungen und den Nullable-Kontext (CS8630) zu aktivieren.
  • Fügen Sie explizite Umwandlungen in bedingten Ausdrücken hinzu, bei denen die beiden Verzweigungen keinen gemeinsamen Typ aufweisen, oder führen Sie ein Upgrade auf C# 9 oder höher für zieltypisierte bedingte Ausdrücke durch (CS8957).
  • Verschieben von Neulinien außerhalb interpolierter Zeichenfolgenausdrücke oder Aktualisieren auf C# 11 oder höher (CS8967).
  • Verwenden Sie beim Übergeben von Argumenten an in-Parameter das Schlüsselwort in anstelle von ref, oder aktualisieren Sie auf C# 12 oder höher (CS9194).
  • Implementieren Sie nicht öffentliche Schnittstellenmitglieder explizit und nicht implizit, oder führen Sie ein Upgrade auf C# 9 oder höher (CS8704) durch.

Die Ziellaufzeit unterstützt kein Feature.

  • CS8021: Es wurde kein Wert für RuntimeMetadataVersion gefunden.
  • CS8701: Die Ziellaufzeit unterstützt keine Standardmäßige Schnittstellenimplementierung.
  • CS8702: 'Member' kann kein Schnittstellenmember im Typ implementieren, da die Ziellaufzeit die Standardschnittstellenimplementierung nicht unterstützt.
  • CS8707: Die Ziellaufzeit unterstützt keine "protected", "protected internal" oder "private geschützte" Barrierefreiheit für ein Mitglied einer Schnittstelle.
  • CS8830: Die Ziellaufzeit unterstützt keine kovarianten Rückgabetypen in Außerkraftsetzungen.
  • CS8831: Die Ziellaufzeit unterstützt keine kovarianten Typen in Außerkraftsetzungen.
  • CS8889: Die Ziellaufzeit unterstützt keine erweiterbaren oder standardmäßigen Aufrufkonventionen der Laufzeitumgebung.
  • CS8919: Die Ziellaufzeit unterstützt keine statischen abstrakten Member in Schnittstellen.
  • CS8929: 'method' kann das Schnittstellenmember 'member' nicht im Typ 'type' implementieren, da die Ziellaufzeit keine statischen abstrakten Member in Schnittstellen unterstützt.
  • CS9041: "type" erfordert das Compilerfeature "Feature", das von dieser Version des C#-Compilers nicht unterstützt wird.
  • CS9064: Ziellaufzeit unterstützt keine Referenzfelder.
  • CS9103: "type" wird in einem Modul mit einer nicht erkannten RefSafetyRulesAttribute-Version definiert, wobei "11" erwartet wird.
  • CS9171: Die Zielruntime unterstützt keine Inlinearraytypen.
  • CS9240: Die Ziel-Laufzeitumgebung unterstützt keine by-ref-ähnlichen Generika.
  • CS9328: Die Methode "methode" verwendet ein Feature, das derzeit nicht von der asynchronen Laufzeit unterstützt wird. Deaktivieren Sie die asynchrone Laufzeitmethode, indem Sie sie mit "System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)" attributieren.
  • CS9346: Update erfordert explizite Schnittstellenimplementierung, die von der Laufzeit nicht unterstützt wird, ohne die Anwendung neu zu starten.
  • CS9352: Die Ziellaufzeit unterstützt keine erweiterten Layouttypen.

Diese Fehler unterscheiden sich von Fehlern der Sprachversion, weil das Aktualisieren von <LangVersion> allein sie nicht behebt. Die Ziellaufzeit (angegeben durch <TargetFramework>) muss das Feature auch auf CLR-/Laufzeitebene unterstützen.

Aktualisieren Sie die <TargetFramework> Projektdatei auf eine Version, die das erforderliche Feature unterstützt. Die folgende Liste zeigt, welche Features die Mindestlaufzeit erfordern:

  • Standardschnittstellenimplementierung, einschließlich geschützter Zugriff (CS8701, CS8702, CS8707): Erfordert .NET Core 3.0 / .NET 5+.
  • Statische abstrakte Member in Schnittstellen (CS8919, CS8929): Erfordert .NET 7+.
  • Kovariante Rückgabetypen (CS8830, CS8831): Erfordert .NET 5+.
  • Bezugsfelder (CS9064): Erfordert .NET 7+.
  • Inline-Array-Typen (CS9171): Erfordert .NET 8+.
  • Ref-ähnliche Generics (CS9240): Erfordert .NET 9+.
  • Erweiterte Layouttypen (CS9352): Erfordert .NET 10+.
  • Erweiterbare Aufrufkonventionen (CS8889): Erfordert .NET 5+.
  • Asynchrone Laufzeitfunktionen (CS9328): Erfordern .NET 10 oder höher.

Aktualisieren Sie das .NET SDK, wenn der Compiler selbst kein erforderliches Compilerfeature unterstützt (CS9041). Dieser Fehler gibt an, dass eine referenzierte Bibliothek Metadatenfeatures verwendet, die eine neuere Compilerversion erfordern.

Stellen Sie sicher, dass ein gültiger Verweis auf die Kernlaufzeitbibliothek vorhanden ist (CS8021). Diese Warnung wird in der Regel beim Erstellen ohne einen Standardlaufzeitverweis angezeigt. Geben Sie eine RuntimeMetadataVersion Option an, oder fügen Sie einen Verweis auf eine Assembly hinzu, die enthält System.Object.

Beheben Sie RefSafetyRulesAttribute Versionsinkompatibilitäten, indem Sie abhängige Module mit einer kompatiblen Compiler-Version (CS9103) erneut kompilieren.

Starten Sie die Anwendung neu, wenn dieser Fehler beim hot reload (CS9346) auftritt. Einige Bearbeitungs- und Fortsetzungsänderungen erfordern einen Neustart, da die Laufzeit die erforderlichen expliziten Schnittstellenimplementierungen nicht dynamisch ausgeben kann.

Funktionszeiger- und Aufrufkonventionsfehler

  • CS8888: Anrufkonvention "verwaltet" kann nicht mit nicht verwalteten Anrufkonventionsbezeichnern kombiniert werden.
  • CS8889: Die Ziellaufzeit unterstützt keine erweiterbaren Aufrufkonventionen oder Standardaufrufkonventionen der Laufzeitumgebung.
  • CS8890: Der Typ 'type' ist nicht definiert.
  • CS8891: Der Typ "Typ" muss öffentlich sein, damit er als Aufrufkonvention verwendet werden kann.

Diese Fehler beziehen sich auf Funktionszeigerdeklarationen und deren Aufrufkonventionsbezeichner, die in C# 9 eingeführt wurden.

Entfernen Sie managed aus Anrufkonventionsbezeichnerlisten, die auch nicht verwaltete Bezeichner (CS8888) enthalten. Die Aufrufkonvention managed ist der Standard und kann nicht mit Spezifizierern unmanaged wie Cdecl, Stdcall, Thiscall oder Fastcall kombiniert werden.

Aktualisieren Sie das Zielframework auf .NET 5 oder höher, um erweiterbare oder Laufzeitstandardaufrufkonventionen (CS8889) zu verwenden. Das attribut UnmanagedCallersOnly und erweiterbare Aufrufkonventionstypen erfordern Laufzeitunterstützung, die in .NET Core 3.1 oder einer früheren Version nicht verfügbar ist.

Stellen Sie sicher, dass der Aufrufkonventionstyp in den referenzierten Assemblys (CS8890) vorhanden ist. Anrufkonventionstypen wie CallConvCdecl, CallConvStdcall, CallConvThiscall, und CallConvFastcall werden definiert in System.Runtime.CompilerServices. Wenn der Typ nicht gefunden wird, fügen Sie einen Verweis auf die richtige Laufzeitbibliothek hinzu.

Erstellen von benutzerdefinierten Anrufkonventionstypen public (CS8891). Wenn Sie einen benutzerdefinierten Aufrufkonventionstyp definieren, deklarieren Sie ihn als public, um ihn in einer Funktionszeigertypdeklaration zu verwenden.

Experimentelle und Vorschaufunktionen

  • CS8058: Das Feature "Feature" ist experimentell und wird nicht unterstützt. Verwenden Sie "/features:feature" zum Aktivieren.
  • CS8305: "type" dient nur zu Auswertungszwecken und unterliegt Änderungen oder Entfernungen in zukünftigen Updates.
  • CS8652: Das Feature befindet sich derzeit in der Vorschau und wird nicht unterstützt. Verwenden Sie die Sprachversion "Vorschau", um Vorschaufeatures zu verwenden.
  • CS9204: "type" dient nur zu Auswertungszwecken und unterliegt Änderungen oder Entfernungen in zukünftigen Updates. Unterdrücken Sie diese Diagnose, um fortzufahren.
  • CS9211: Das DiagnosticId-Argument für das Attribut "Experimental" muss ein gültiger Bezeichner sein.
  • CS9268: "type" dient nur zu Auswertungszwecken und unterliegt änderungen oder Entfernungen in zukünftigen Updates: 'message'. Unterdrücken Sie diese Diagnose, um fortzufahren.

Diese Diagnose gibt an, dass Sie ein Feature oder einen Typ verwenden, der als experimentell gekennzeichnet ist oder nur in der Vorschausprachenversion verfügbar ist.

Warnung

Experimentelle Features können sich ändern. Die APIs können sich ändern oder in zukünftigen Updates entfernt werden. Das Einschließen experimenteller Funktionen ist eine Möglichkeit für Bibliotheksautoren, Feedback zu Ideen und Konzepten für die zukünftige Entwicklung zu erhalten. Seien Sie äußerst vorsichtig, wenn Sie eine als experimentell gekennzeichnete Funktion verwenden.

Legen Sie <LangVersion>preview</LangVersion> in Ihrer Projektdatei fest, um Sprachfeatures in der Vorschau zu verwenden (CS8652). Vorschaufeatures sind noch nicht abgeschlossen und können sich in zukünftigen Versionen ändern.

Unterdrücken Sie die spezifische Diagnose-ID, um die experimentelle Natur der API (CS8058, CS8305, CS9204, CS9268) zu bestätigen. Bibliotheksautoren markieren APIs mit System.Diagnostics.CodeAnalysis.ExperimentalAttribute , um anzugeben, dass sie sich ändern können. Sie können die Diagnose mithilfe #pragma warning disable oder durch Hinzufügen der Diagnose-ID <NoWarn> zu Ihrer Projektdatei unterdrücken.

Stellen Sie sicher, dass diagnosticId ein gültiger C#-Bezeichner für [Experimental] ist (CS9211). Der Bezeichner muss standardbenennungsregeln entsprechen. Sie darf keine Leerzeichen, Sonderzeichen enthalten oder mit einer Ziffer beginnen. Sie können auch eigene experimentelle Funktionen deklarieren, indem Sie System.Diagnostics.CodeAnalysis.ExperimentalAttribute verwenden.

Breaking Changes bei der Strukturinitialisierung

  • CS0171, CS8881: Das Feld "Name" muss vollständig zugewiesen werden, bevor das Steuerelement an den Aufrufer zurückgegeben wird. Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um das Feld automatisch standardmäßig zu verwenden.
  • CS0188, CS8885: Das "this"-Objekt kann nicht verwendet werden, bevor alle Felder zugewiesen wurden. Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um die nicht zugewiesenen Felder automatisch standardmäßig zu verwenden.
  • CS0843, CS8880: Die automatisch implementierte Eigenschaft "name" muss vollständig zugewiesen werden, bevor das Steuerelement an den Aufrufer zurückgegeben wird. Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um die Eigenschaft automatisch standardmäßig zu verwenden.
  • CS9014: Verwendung der möglicherweise nicht zugewiesenen automatisch implementierten Eigenschaft "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um die Eigenschaft automatisch standardmäßig zu verwenden.
  • CS9015: Verwendung des möglicherweise nicht zugewiesenen Felds "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um das Feld automatisch standardmäßig zu verwenden.
  • CS9016: Verwendung der möglicherweise nicht zugewiesenen automatisch implementierten Eigenschaft "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um die Eigenschaft automatisch standardmäßig zu verwenden.
  • CS9017: Verwendung des möglicherweise nicht zugewiesenen Felds "name". Erwägen Sie das Aktualisieren auf die Sprachversion "Version", um das Feld automatisch standardmäßig zu verwenden.

Diese Fehler und Warnungen helfen sicherzustellen, dass struct Typen ordnungsgemäß initialisiert werden, bevor auf ihre Felder zugegriffen wird. In früheren Versionen von C# müssen Sie alle Felder in einer Struktur in einem beliebigen Konstruktor explizit zuweisen. Der parameterlose Konstruktor initialisiert alle Felder mit ihrem Standardwert. In späteren Versionen initialisieren alle Konstruktoren alle Felder. Entweder wird das Feld explizit festgelegt, in einem Feldinitialisierer festgelegt oder auf den Standardwert festgelegt.

Aktualisieren Sie auf C# 11 oder höher, damit alle Konstruktoren alle struct Felder automatisch standardmäßig verwenden (CS0171, CS0188, CS0843 und ihre neueren Gegenstücke CS8880, CS8881, CS8885). Ab C# 11 initialisiert der Compiler automatisch alle Felder, die in einem Konstruktor nicht explizit auf ihre Standardwerte festgelegt wurden.

Rufen Sie den Standardkonstruktor explizit in Ihrem Strukturkonstruktor : this() auf, wenn Sie kein Upgrade auf C# 11 (CS0171, CS0188, CS0843) durchführen können. Mit diesem Ansatz wird sichergestellt, dass alle Felder ihre Standardwerte erhalten, bevor der Konstruktortext ausgeführt wird:

struct S
{
    public int AIProp { get; set; }
    public S(int i) : this() // Ensures all fields are initialized
    {
        AIProp = i;
    }
}

Weisen Sie alle Felder und automatischen Eigenschaften zu, bevor Sie this verwenden oder bevor der Konstruktor beendet wird (CS9014, CS9015, CS9016, CS9017). Diese Diagnose wird angezeigt, wenn ein neuerer Compiler erkennt, dass Sie möglicherweise eine Eigenschaft oder ein Feld lesen, bevor sie zugewiesen wurde. Weisen Sie entweder explizit einen Wert zu, oder führen Sie ein Upgrade auf eine Version durch, in der die automatische Standardeinstellung die Warnung beseitigt.

Implementierungsspezifische Attribute

  • CS9269: UnscopedRefAttribute ist nur in C# 11 oder höher oder bei der Zielbestimmung von net7.0 oder höher gültig.
  • CS9271: Der Typ "Microsoft.CodeAnalysis.EmbeddedAttribute" darf nicht generisch, muss intern, nicht dateilokal, versiegelt und nicht statisch sein, einen parameterlosen Konstruktor haben, von System.Attribute erben und auf jeden Typ anwendbar sein.

Diese Fehler beziehen sich auf Attribute, die entweder vom Compiler generiert oder an bestimmte Laufzeitversionen gebunden sind.

Aktualisieren Sie auf C# 11 und .NET 7 oder höher, um UnscopedRefAttribute (CS9269) zu verwenden. Dieses Attribut gibt an, dass ein ref Rückgabewert oder ref struct Parameter keine bereichsbezogene Lebensdauer hat. Es erfordert sowohl die Sprachversion als auch das Zielframework, um die Mindestanforderungen zu erfüllen.

Deklarieren Sie nicht manuell Microsoft.CodeAnalysis.EmbeddedAttribute (CS9271). Der Compiler generiert die Quelle für dieses Attribut bei Bedarf automatisch. Wenn Sie einen manuell deklarierten Typ mit diesem Namen haben, entfernen Sie ihn, oder benennen Sie ihn um, um Konflikte mit der vom Compiler generierten Version zu vermeiden.