Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden die folgenden Compilerwarnungen behandelt:
- CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058: Funktion ist nicht verfügbar. Verwenden Sie eine neuere Sprachversion.
- CS8058: Funktion ist experimentell.
- CS8192: Die angegebene Sprachversion wird nicht unterstützt oder ist ungültig
- CS8303: Die angegebene Sprachversion darf keine führenden Nullen enthalten
- CS8304: Die Compilerversion ist kleiner als die Sprachversion
- CS1738: Benannte Argumente müssen angegeben werden, nachdem alle festgelegten Argumente spezifiziert wurden.
- CS8306: Der Name des Tupel-Elements wird abgeleitet.
- CS8314: Ein Ausdruck vom Typ kann nicht von einem Muster vom Typ verarbeitet werden
- CS8371: Feldbezogene Attribute für automatische Eigenschaften werden in der Sprachversion nicht unterstützt
-
CS8401: Um
@$anstelle von$@für eine interpolierte wörtliche Zeichenfolge zu verwenden, verwenden Sie eine neuere Sprachversion. - CS8511: Ein Ausdruck eines Typs kann nicht mit einem Muster eines Typs verarbeitet werden.
- CS8627: Ein nullable Typparameter muss als Werttyp oder nicht-nullbarer Verweistyp bekannt sein
- CS8630: Ungültige Nullable-Optionen. Verwenden Sie eine neuere Sprachversion
- CS8652: Der Modifizierer ist für dieses Element nicht gültig.
- CS8704: Der Typ implementiert das Schnittstellenmitglied nicht. Er kann ein nicht öffentliches Mitglied nicht implizit implementieren.
- CS8706: Der Typ kann keinen Schnittstellenmember implementieren, weil diese Funktion in dieser Version nicht verfügbar ist.
- CS8904: Ungültige Varianz: Der Typparameter muss gültig sein.
- CS8912: Vererbung von einem Record mit einer versiegelten „Object.ToString“ wird nicht unterstützt.
- CS8919: Es kann kein angegebener Schnittstellenmember im Typ implementiert werden, da die Ziellaufzeit statische abstrakte Member in Schnittstellen nicht unterstützt.
- CS8929: Die Methode kann keine Schnittstellenmitglieder in diesem Typ implementieren, da die Ziellaufzeit statische abstrakte Member in Schnittstellen nicht unterstützt.
- CS8957: Bedingter Ausdruck ist in der Sprachversion ungültig, weil zwischen Typen kein gemeinsamer Typ gefunden wurde.
- CS8967: Neue Zeilen in einer nicht wörtlichen interpolierten Zeichenfolge werden in C# nicht unterstützt
- CS9041: Erfordert Compilerfeatures, die von dieser Version des C#-Compilers nicht unterstützt werden.
- CS9014: Fehler: Verwendung einer möglicherweise nicht zugewiesenen Eigenschaft. Aktualisieren Sie die Eigenschaft, um sie automatisch auf den Standardwert zurückzusetzen.
- CS9015: Fehler: Verwendung eines möglicherweise nicht initialisierten Feldes. Upgrade auf automatische Standardwertzuweisung des Feldes.
- CS9016: Warnung: Verwendung einer möglicherweise nicht zugewiesenen Eigenschaft. Stellen Sie die Eigenschaft auf automatische Standardeinstellung um.
- CS9017: Warnung: Verwendung eines möglicherweise nicht zugewiesenen Felds. Aktualisieren Sie, um das Feld automatisch zu standardisieren.
- CS9064: Ziellaufzeit unterstützt keine Referenzfelder.
- CS9103: Definition in einem Modul mit einer nicht erkannten RefSafetyRulesAttribute-Version, die „11“ erwartet.
- CS9171: Die Zielruntime unterstützt keine Inlinearraytypen.
-
CS9194: Das Argument kann nicht mit dem Schlüsselwort „
ref“ übergeben werden. Umref-Argumente anin-Parameter zu übergeben, müssen Sie auf die Sprachversion 12 oder höher aktualisieren. - CS9202: Die Funktion ist in C# 12.0. nicht verfügbar. Bitte verwenden Sie eine neuere Sprachversion
- CS9211: Das DiagnosticId-Argument für das Attribut "Experimental" muss ein gültiger Bezeichner sein.
- CS9240: Die Ziel-Laufzeitumgebung unterstützt keine by-ref-ähnlichen Generika.
- CS9260: Das Feature ist in C# 13.0 nicht verfügbar. Bitte verwenden Sie eine neuere Sprachversion.*
- CS9268: Typ dient nur zu Auswertungszwecken und unterliegt Änderungen oder Entfernungen in zukünftigen Updates. 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" muss nicht generisch, intern, versiegelt, nicht statisch sein, einen parameterlosen Konstruktor haben, 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 eine neuere Sprachversion.
- CS9328: Die Methode verwendet ein Feature, das derzeit nicht von der asynchronen Laufzeit unterstützt wird.
Darüber hinaus beziehen sich die folgenden Fehler und Warnungen auf Strukturinitialisierungsänderungen in aktuellen Versionen:
- CS0171, CS8881: Das unterstützende Feld für die automatisch implementierte Eigenschaft „Name“ muss vollständig zugewiesen werden, bevor die Steuerung wieder an den Aufrufer übergeben wird.
- CS0188, CS8885: Das Objekt „this“ kann nicht verwendet werden, bevor nicht alle seine Felder zugewiesen wurden
- CS0843, CS8880: Das unterstützende Feld für die automatisch implementierte Eigenschaft „Name“ muss vollständig zugewiesen werden, bevor die Steuerung wieder an den Aufrufer übergeben wird
- CS8305: Die Funktion dient nur zu Auswertungszwecken und kann in zukünftigen Aktualisierungen geändert oder entfernt werden.
- CS9204: Der Typ dient nur zu Auswertungszwecken und kann in zukünftigen Aktualisierungen geändert oder entfernt werden. Unterdrücken Sie diese Diagnose, um fortzufahren.
Die Ursache für all diese Fehler und Warnungen liegt darin, dass der installierte Compiler eine neuere Version von C# unterstützt als die von Ihrem Projekt ausgewählte Version. Der C#-Compiler kann mit jeder früheren Version kompatibel sein. Sie können die Syntax anhand einer früheren Version von C# überprüfen oder weil Ihr Projekt ältere Bibliotheken oder Runtimes unterstützen muss.
Es gibt zwei mögliche Ursachen und drei Möglichkeiten, diese Fehler und Warnungen zu beheben.
Aktualisieren des Zielframeworks
Der Compiler bestimmt basierend auf den folgenden Regeln eine Standardversion:
| 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 ihr ausgewähltes Framework nicht mit der erforderlichen Sprachversion übereinstimmt, können Sie das Zielframework aktualisieren.
Auswählen der entsprechenden Sprachversion
Möglicherweise haben Sie in Ihrer Projektdatei ein älteres Zielframework ausgewählt. Wenn Sie das LangVersion-Element aus Ihrer Projektdatei entfernen, verwendet der Compiler den Standardwert, der im vorherigen Abschnitt aufgeführt wurde. In der folgenden Tabelle sind alle aktuellen C#-Sprachversionen enthalten. Sie können auch eine bestimmte Sprachversion 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). |
latestMajoroder 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-2oder 2 |
Der Compiler akzeptiert nur Syntax, die in ISO/IEC 23270:2006 C# (2.0) enthalten ist. |
ISO-1oder 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 die einzelnen Frameworkversionen unterstützten Sprachversionen finden Sie im Artikel zum Konfigurieren der Sprachversion im entsprechenden Abschnitt der Sprachreferenz.
Vermeiden des aktualisierten Features
Wenn Sie ältere Bibliotheken oder Runtimes unterstützen müssen, müssen Sie möglicherweise die Verwendung neuerer Funktionen vermeiden.
Experimentelle Funktionen aktivieren
Die Diagnose für experimentelle Funktionen kann deaktiviert werden, um die experimentelle Funktion zu verwenden.
Warnung
Experimentelle Funktionen unterliegen Änderungen. Die APIs können sich ändern oder in zukünftigen Aktualisierungen 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.
Sie können auch ihre eigenen experimentellen Features mithilfe der System.Diagnostics.CodeAnalysis.ExperimentalAttribute. Der Compiler gibt CS9211 aus, wenn der für die experimentelle Funktion verwendete Bezeichner kein gültiger Bezeichner ist.
Breaking Changes bei der Strukturinitialisierung
Alle diese Fehler und Warnungen tragen dazu bei, 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.
- CS0171, CS8881: Das unterstützende Feld für die automatisch implementierte Eigenschaft „Name“ muss vollständig zugewiesen werden, bevor die Steuerung wieder an den Aufrufer übergeben wird.
- CS0188, CS8885: Das Objekt „this“ kann nicht verwendet werden, bevor nicht alle seine Felder zugewiesen wurden
- CS0843, CS8880: Das unterstützende Feld für die automatisch implementierte Eigenschaft „Name“ muss vollständig zugewiesen werden, bevor die Steuerung wieder an den Aufrufer übergeben wird
Sie können diesen Fehler beheben, indem Sie Ihre Sprachversion auf C# 11 aktualisieren, jeder struct-Konstruktor initialisiert alle Felder. Wenn dies keine mögliche Option ist, müssen Sie den Standardkonstruktor explizit aufrufen, wie im folgenden Beispiel gezeigt:
struct S
{
public int AIProp { get; set; }
public S(int i){} //CS0843
// Try the following lines instead.
// public S(int i) : this()
// {
// AIProp = i;
// }
}
class Test
{
static int Main()
{
return 1;
}
}
Implementierungsspezifische Attribute
-
CS9271: Der Typ "
Microsoft.CodeAnalysis.EmbeddedAttribute" muss nicht generisch, intern, versiegelt, nicht statisch sein, einen parameterlosen Konstruktor haben, von System.Attribute erben und auf jeden Typ angewendet werden können.
Der Compiler generiert die Quelle für dieses Attribut bei Bedarf für den Quellcode. Sie sollten diesen Typ nicht deklarieren.