Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver följande kompilatorfel och varningar:
- CS0171: Fältets namn måste tilldelas fullständigt innan kontrollen returneras till anroparen. Överväg att uppdatera till språkversionen "version" för att automatiskt standarda fältet.
- CS0188: Det här objektet kan inte användas innan alla dess fält har tilldelats. Överväg att uppdatera till språkversionen "version" för att automatiskt standarda de otilldelade fälten.
- CS0843: Den automatiskt implementerade egenskapen "name" måste tilldelas fullständigt innan kontrollen returneras till anroparen. Överväg att uppdatera till språkversionen "version" för att automatiskt standarda egenskapen.
- CS1617: Ogiltigt alternativ för /langversion. Använd "/langversion:?" för att lista värden som stöds.
- CS1638: "identifierare" är en reserverad identifierare och kan inte användas när ISO-språkversionsläget används
- CS1738: Namngivna argumentspecifikationer måste visas när alla fasta argument har angetts. Använd språkversion 7.2 eller senare för att tillåta icke-avslutande namngivna argument.
- CS8021: Inget värde för RuntimeMetadataVersion hittades. Ingen sammansättning som innehåller System.Object hittades och inget värde för RuntimeMetadataVersion angavs via alternativ.
- CS8022: Funktionen är inte tillgänglig i C# 1. Använd språkversion 2 eller senare.
- CS8023: Funktionen är inte tillgänglig i C# 2. Använd språkversion 3 eller senare.
- CS8024: Funktionen är inte tillgänglig i C# 3. Använd språkversion 4 eller senare.
- CS8025: Funktionen är inte tillgänglig i C# 4. Använd språkversion 5 eller senare.
- CS8026: Funktionen är inte tillgänglig i C# 5. Använd språkversion 6 eller senare.
- CS8058: Funktionen "feature" är experimentell och stöds inte. Använd funktionen //för att aktivera funktionen.
- CS8059: Funktionen är inte tillgänglig i C# 6. Använd språkversion 7 eller senare.
- CS8107: Funktionen är inte tillgänglig i C# 7.0. Använd språkversion 7.1 eller senare.
- CS8192: Den angivna språkversionen stöds inte eller är ogiltig: "värde".
- CS8302: Funktionen är inte tillgänglig i C# 7.1. Använd språkversion 7.2 eller senare.
- CS8303: Den angivna språkversionen "value" kan inte ha inledande nolla
- CS8304: Kompilatorversion: "version". Språkversion: version.
- CS8305: "type" är endast i utvärderingssyfte och kan komma att ändras eller tas bort i framtida uppdateringar.
- CS8306: Tuppelns elementnamn "name" härleds. Använd språkversion 7.1 eller senare för att få åtkomst till ett element med dess härledda namn.
- CS8314: Ett uttryck av typen "typ" kan inte hanteras av ett mönster av typen "typ" i C#-versionen. Använd språkversionen "version" eller senare.
- CS8320: Funktionen är inte tillgänglig i C# 7.2. Använd språkversion 7.3 eller senare.
- CS8370: Funktionen är inte tillgänglig i C# 7.3. Använd språkversion 8 eller senare.
- CS8371: Fältriktade attribut för automatiska egenskaper stöds inte i språkversion 7.3. Använd språkversion 8.0 eller senare.
- CS8400: Funktionen är inte tillgänglig i C# 8. Använd språkversion 9 eller senare.
- CS8401: Om du vill använda @$i stället för $@för en interpolerad ordagrann sträng använder du språkversion 8.0 eller senare.
- CS8511: Ett uttryck av typen "typ" kan inte hanteras av ett mönster av typen "typ". Använd språkversionen "version" eller senare för att matcha en öppen typ med ett konstant mönster.
- CS8627: En parameter av typen null måste vara känd för att vara en värdetyp eller en referenstyp som inte går att nolla om inte språkversionen "version" eller senare används. Överväg att ändra språkversionen eller lägga till en "klass", "struct" eller typbegränsning.
- CS8630: Ogiltigt alternativvärde: "värde" för C#-version. Använd språkversionen "version" eller senare.
- CS8652: Funktionen är för närvarande i förhandsversion och stöds inte. Om du vill använda förhandsversionsfunktioner använder du språkversionen "förhandsversion".
- CS8701: Målkörningen stöder inte standardgränssnittsimplementering.
- CS8702: "member" kan inte implementera gränssnittsmedlemmen "member" i typen "type" eftersom målkörmiljön inte stöder standardimplementering i gränssnitt.
- CS8703: Modifierarens modifierare är inte giltig för det här objektet i C#-versionen. Använd språkversion 8.0 eller senare.
- CS8704: "type" implementerar inte gränssnittsmedlemmen "member". "type" kan inte implicit implementera en icke-offentlig medlem i C#-versionen. Använd språkversionen "version" eller senare.
- CS8706: Typen kan inte implementera gränssnittsmedlem i typ eftersom funktionen inte är tillgänglig i C# 7.3.
- CS8707: Målkörmiljön stöder inte åtkomstnivåerna "skyddad", "skyddad intern" eller "privat skyddad" för en medlem i ett gränssnitt.
- CS8773: Funktionen är inte tillgänglig i C# 9. Använd språkversion 10 eller senare.
- CS8830: Målkörningen stöder inte kovarianta returtyper vid åsidosättningar. Returtypen måste vara 'type' för att matcha den åsidosatta medlemmen 'member'.
- CS8831: Målkörningen har inte stöd för kovarianta typer vid åsidosättningar. Typen måste vara 'type' för att matcha den åsidosatta medlemmen 'member'.
- CS8888: "hanterad" anropskonvention kan inte kombineras med ohanterade anropskonventionsspecificerare.
- CS8889: Målkörtiden stöder inte utökningsbara anropskonventioner eller standardanropskonventioner för körningsmiljön.
- CS8890: Typen "typ" har inte definierats.
- CS8891: Typen "typ" måste vara offentlig för att kunna användas som en anropskonvention.
- CS8904: Ogiltig varians: Typparametern måste alltid vara giltig på "member" såvida inte språkversion 9.0 eller senare används.
- CS8912: Att ärva från en record med en förseglad 'Object.ToString' stöds inte i C# 9.0. Använd språkversion 10.0 eller högre.
- CS8919: Målmiljön stöder inte statiska abstrakta medlemmar i gränssnitt.
- CS8929: 'metoden' kan inte implementera gränssnittsmedlemmen 'member' i typen 'type' eftersom målkörmiljön inte stöder statiska abstrakta medlemmar i gränssnitt.
- CS8936: Funktionen är inte tillgänglig i C# 10. Använd språkversion 11 eller senare.
- CS8957: Villkorsuttrycket är inte giltigt i språkversion 8.0 eftersom en vanlig typ inte hittades mellan "typ" och "typ". Om du vill använda en måltypskonvertering uppgraderar du till språkversion 9.0 eller senare.
- CS8967: Newlines i en icke-ordagrann interpolerad sträng stöds inte i C# 10.0. Använd språkversion 11.0 eller senare.
- CS9014: Användning av den möjligen otilldelade automatiskt implementerade egenskapen "name". Överväg att uppdatera till språkversionen "version" för att ge egenskapen ett standardvärde automatiskt.
- CS9015: Användning av eventuellt otilldelat fält "namn". Överväg att uppdatera till språkversionen "version" för att automatiskt standarda fältet.
- CS9016: Användning av den eventuellt otilldelade automatiskt implementerade egenskapen "name". Överväg att uppdatera till språkversionen "version" för att automatiskt standarda egenskapen.
- CS9017: Användning av eventuellt otilldelat fält "namn". Överväg att uppdatera till språkversionen "version" för att automatiskt standarda fältet.
- CS9041: "type" kräver kompilatorfunktionen "feature", som inte stöds av den här versionen av C#-kompilatorn.
- CS9058: Funktionen är inte tillgänglig i C# 11. Använd språkversion 12 eller senare.
- CS9064: Målkörningen stöder inte referensfält.
- CS9103: "type" definieras i en modul med en okänd RefSafetyRulesAttribute-version som förväntar sig "11".
- CS9171: Målruntimen stöder inte infogade arrayer.
- CS9194: Argumentet får inte skickas med nyckelordet referens. Om du vill skicka "ref"-argument till in-parametrar uppgraderar du till språkversion 12 eller senare.
- CS9202: Funktionen är inte tillgänglig i C# 12.0. Använd språkversion 13 eller senare.
- CS9204: "typ" är endast i utvärderingssyfte och kan komma att ändras eller tas bort i framtida uppdateringar. Ignorera den här diagnostiken för att fortsätta.
- CS9211: Argumentet diagnosticId till attributet "Experimental" måste vara en giltig identifierare.
- CS9240: Målkörningen stöder inte by-ref-liknande generiska värden.
- CS9260: Funktionen är inte tillgänglig i C# 13.0. Använd språkversion 14 eller senare.
- CS9268: "typ" är endast i utvärderingssyfte och kan komma att ändras eller tas bort i framtida uppdateringar: "meddelande". Ignorera den här diagnostiken för att fortsätta.
- CS9269: UnscopedRefAttribute är endast giltigt i C# 11 eller senare eller när du riktar in dig på net7.0 eller senare.
- CS9271: Typen "Microsoft. CodeAnalysis.EmbeddedAttribute måste vara icke-generisk, intern, icke-fil, förseglad, icke-statisk, ha en parameterlös konstruktor, ärver från System.Attribute och kunna tillämpas på alla typer.
- CS9327: Funktionen är inte tillgänglig i C# 14.0. Använd språkversionen "version" eller senare.
- CS9328: Metoden "method" använder en funktion som för närvarande inte stöds av körningsasynkronisering. Avregistrera metoden från körningsasynkronisering genom att tillskriva den med "System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)".
- CS9346: Uppdateringen kräver att explicit gränssnittsimplementering genereras, vilket inte stöds av körningen utan att programmet startas om.
- CS9352: Målkörningen stöder inte utökade layouttyper.
Orsaken bakom alla dessa fel och varningar är att kompilatorn eller körningen inte stöder en funktion som du använder. Lösningen beror på om problemet är ett språkversionskonfigurationsproblem, ett språkversionsfel, en körningsbegränsning eller en experimentell funktion.
Konfigurationsfel för språkversion
- CS1617: Ogiltigt alternativ för /langversion. Använd "/langversion:?" för att lista värden som stöds.
- CS1638: "identifierare" är en reserverad identifierare och kan inte användas när ISO-språkversionsläget används
- CS8192: Den angivna språkversionen stöds inte eller är ogiltig: "värde".
- CS8303: Den angivna språkversionen "value" kan inte ha inledande nolla
- CS8304: Kompilatorversion: "version". Språkversion: version.
Dessa fel indikerar att <LangVersion> inställningen i projektfilen eller kompilatoralternativet -langversion är ogiltig eller inkompatibel med den installerade kompilatorn.
<LangVersion> Korrigera värdet i projektfilen till en giltig språkversionssträng (CS1617, CS8192, CS8303). Giltiga värden omfattar default, latest, preview, latestMajor eller ett specifikt versionsnummer, till exempel 7.3, 8.0, 9.0, 10, 11, 12, 13 eller 14. Inkludera inte inledande nolla i versionsnumret. Se C#-språkversioner för den fullständiga listan över värden som stöds.
Tips/Råd
Om du vill se en lista över språkversioner som stöds refererar du till tabellen i den här artikeln, kompilerar med -langversion:?eller tillfälligt anger <LangVersion>?</LangVersion> i projektfilen innan du skapar.
Uppdatera .NET SDK till en version vars kompilator stöder den språkversion som du angav (CS8304). Varje version av C#-kompilatorn stöder språkversioner upp till ett visst maxvärde. Om du anger en språkversion som är nyare än vad kompilatorn stöder uppgraderar du SDK:n.
Ta bort identifierare med dubbla understreck eller ändra språkversionen från ISO-1 eller ISO-2 till en nyare version (CS1638). Iso-språklägena reserverar identifierare som innehåller __ (dubbla understreck) eftersom de inte är kompatibla med ISO C#-specifikationen.
Note
Den aktuella C#-kompilatorn genererar inte längre CS1638. Äldre kompilatorer avgav det här felet när de använde språkversionerna ISO-1 eller ISO-2 .
Kompilatorn bestämmer sin standardspråkversion från målramverket:
| Mål | Utgåva | Standardinställning för C#-språkversion |
|---|---|---|
| .NÄT | 11.x | C# 15 |
| .NÄT | 10.x | C# 14 |
| .NÄT | 9.x | C# 13 |
| .NÄT | 8.x | C# 12 |
| .NÄT | 7.x | C# 11 |
| .NÄT | 6.x | C# 10 |
| .NÄT | 5.x | C# 9.0 |
| .NET Core | 3.x | C# 8.0 |
| .NET Core | 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 | alla | C# 7.3 |
Om du tar bort elementet LangVersion från projektfilen använder kompilatorn standardvärdet för målramverket. Du kan också ange en specifik version för att aktivera nyare funktioner:
| Värde | Innebörd |
|---|---|
preview |
Kompilatorn accepterar alla giltiga språksyntaxer från den senaste förhandsversionen. |
latest |
Kompilatorn accepterar syntax från den senaste versionen av kompilatorn (inklusive delversion). |
latestMajoreller default |
Kompilatorn accepterar syntax från den senaste versionen av huvudversionen av kompilatorn. |
15.0 |
Kompilatorn accepterar endast syntax som ingår i C# 15 eller lägre. |
14.0 |
Kompilatorn accepterar endast syntax som ingår i C# 14 eller lägre. |
13.0 |
Kompilatorn accepterar endast syntax som ingår i C# 13 eller lägre. |
12.0 |
Kompilatorn accepterar endast syntax som ingår i C# 12 eller lägre. |
11.0 |
Kompilatorn accepterar endast syntax som ingår i C# 11 eller lägre. |
10.0 |
Kompilatorn accepterar endast syntax som ingår i C# 10 eller lägre. |
9.0 |
Kompilatorn accepterar endast syntax som ingår i C# 9 eller lägre. |
8.0 |
Kompilatorn accepterar endast syntax som ingår i C# 8.0 eller lägre. |
7.3 |
Kompilatorn accepterar endast syntax som ingår i C# 7.3 eller lägre. |
7.2 |
Kompilatorn accepterar endast syntax som ingår i C# 7.2 eller lägre. |
7.1 |
Kompilatorn accepterar endast syntax som ingår i C# 7.1 eller lägre. |
7 |
Kompilatorn accepterar endast syntax som ingår i C# 7.0 eller lägre. |
6 |
Kompilatorn accepterar endast syntax som ingår i C# 6.0 eller lägre. |
5 |
Kompilatorn accepterar endast syntax som ingår i C# 5.0 eller lägre. |
4 |
Kompilatorn accepterar endast syntax som ingår i C# 4.0 eller lägre. |
3 |
Kompilatorn accepterar endast syntax som ingår i C# 3.0 eller lägre. |
ISO-2eller 2 |
Kompilatorn accepterar endast syntax som ingår i ISO/IEC 23270:2006 C# (2.0). |
ISO-1eller 1 |
Kompilatorn accepterar endast syntax som ingår i ISO/IEC 23270:2003 C# (1.0/1.2). |
Mer information om vilka språkversioner som stöds för varje ramverksversion finns i Konfigurera språkversion i avsnittet språkreferens.
Funktionen är inte tillgänglig i språkversion
- CS1738: Namngivna argumentspecifikationer måste visas när alla fasta argument har angetts.
- CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058, CS9202, CS9260, CS9327: Funktionen är inte tillgänglig i C# X. Använd språkversion Y eller senare.
- CS8306: Tuppelns elementnamn härleds. Använd språkversion 7.1 eller senare för att få åtkomst till ett element med dess härledda namn.
- CS8314: Ett uttryck av typen "typ" kan inte hanteras av ett mönster av typen "typ" i C#-versionen. Använd språkversionen "version" eller senare.
- CS8371: Fältriktade attribut för automatiska egenskaper stöds inte i språkversion 7.3.
- CS8401: Om du vill använda @$i stället för $@för en interpolerad ordagrann sträng använder du språkversion 8.0 eller senare.
- CS8511: Ett uttryck av typen "typ" kan inte hanteras av ett mönster av typen "typ". Använd språkversionen "version" eller senare för att matcha en öppen typ med ett konstant mönster.
- CS8627: En parameter av typen null måste vara känd för att vara en värdetyp eller en referenstyp som inte går att nolla om inte språkversionen "version" eller senare används. Överväg att ändra språkversionen eller lägga till en "klass", "struct" eller typbegränsning.
- CS8630: Ogiltigt alternativvärde: "värde" för C#-version. Använd språkversionen "version" eller senare.
- CS8703: Modifieraren 'modifier' är inte giltig för det här objektet i C#-version.
- CS8704: "type" implementerar inte gränssnittsmedlemmen "member". "type" kan inte implicit implementera en icke-offentlig medlem.
- CS8706: Typen kan inte implementera gränssnittsmedlem eftersom funktionen inte är tillgänglig i den här versionen.
- CS8904: Ogiltig varians: Typparametern måste alltid vara giltig på "member" såvida inte språkversion 9.0 eller senare används.
- CS8912: Det går inte att ärva från en record med en sluten "Object.ToString" i C# 9.0.
- CS8957: Villkorsuttrycket är inte giltigt i språkversion 8.0 eftersom det inte gick att hitta någon vanlig typ mellan typerna.
- CS8967: Newlines i en icke-ordagrann interpolerad sträng stöds inte i C# 10.0.
- CS9194: Argumentet får inte skickas med nyckelordet referens. Om du vill skicka "ref"-argument till in-parametrar uppgraderar du till språkversion 12 eller senare.
De här felen tyder på att du använder en språkfunktion som kräver en nyare C#-version än ditt projekt för närvarande riktar in sig på. Lös dessa fel genom att använda något av följande alternativ:
Uppgradera målramverket så att kompilatorn automatiskt väljer den språkversion som krävs. Varje målramverk mappas till en C#-standardversion. Till exempel har .NET 8 C# 12 som standard, .NET 9 har C# 13 som standard och .NET 10 har C# 14 som standard. Se tabellen i Språkversionskonfigurationsfel för den fullständiga mappningen.
Ange elementet
<LangVersion>i projektfilen till den version som krävs eller högre. Om du till exempel vill aktivera C# 12-funktioner lägger du<LangVersion>12</LangVersion>till i en<PropertyGroup>i projektfilen.
Om du inte kan uppgradera bör du undvika funktionen som utlöste felet. Felmeddelandet namnger funktionen och den version som krävs. Följande lista innehåller ytterligare kontext för specifika fel:
- Använd explicit namngivna argument för alla argument eller uppgradera till C# 7.2 eller senare för att använda icke-avslutande namngivna argument (CS1738).
- Få åtkomst till tuppelns element med deras deklarerade namn i stället för det härledda namnet eller uppgradera till C# 7.1 eller senare (CS8306).
- Använd
$@"..."i stället för@$"..."för interpolerade verbatim-strängar i C#-versioner före 8.0 (CS8401). - Lägg till explicita typbegränsningar till parametrar av typen null, eller uppgradera till C# 9 eller senare, vilket gör att det här kravet (CS8627) lättas upp.
- Uppgradera till C# 8.0 eller senare för att aktivera nullable-annoteringar och nullable-kontexten (CS8630).
- Lägg till explicita typomvandlingar i villkorsuttryck där de två grenarna inte har någon gemensam typ, eller uppgradera till C# 9 eller senare om du vill använda måltypsbestämda villkorsuttryck (CS8957).
- Flytta nya linjer utanför interpolerade stränguttryck eller uppgradera till C# 11 eller senare (CS8967).
- Använd nyckelordet
ini stället förrefnär du skickar argument tillinparametrar eller uppgradera till C# 12 eller senare (CS9194). - Implementera icke-offentliga gränssnittsmedlemmar explicit i stället för implicit eller uppgradera till C# 9 eller senare (CS8704).
Målkörningsmiljön stöder inte funktionen
- CS8021: Inget värde för RuntimeMetadataVersion hittades.
- CS8701: Målkörningen stöder inte standardgränssnittsimplementering.
- CS8702: 'member' kan inte implementera en gränssnittsmedlem i en typ eftersom målkörmiljön inte stöder standardimplementering av gränssnitt.
- CS8707: Målkörningen stöder inte åtkomstnivån "skyddad", "skyddad intern" eller "privat skyddad" för en medlem i ett gränssnitt.
- CS8830: Målkörningen stöder inte kovarianta returtyper vid åsidosättningar.
- CS8831: Målkörmiljön stöder inte kovarianta typer vid åsidosättningar.
- CS8889: Målkörmiljön stöder inte utökningsbara anropskonventioner eller standardanropskonventioner för körningsmiljön.
- CS8919: Målkörmiljön stöder inte statiska abstrakta medlemmar i gränssnitt.
- CS8929: 'method' kan inte implementera gränssnittsmedlem 'member' i typen 'type' eftersom målmiljön inte stöder statiska abstrakta medlemmar i gränssnitt.
- CS9041: "type" kräver kompilatorfunktionen "feature", som inte stöds av den här versionen av C#-kompilatorn.
- CS9064: Målmiljön stöder inte ref-fält.
- CS9103: "type" definieras i en modul med en okänd RefSafetyRulesAttribute-version som förväntar sig "11".
- CS9171: Målmiljön stöder inte inbäddade matristyper.
- CS9240: Målkörningen stöder inte by-ref-liknande generiska värden.
- CS9328: Metoden "method" använder en funktion som för närvarande inte stöds av körningsasynkronisering. Avregistrera metoden från körningsasynkronisering genom att tillskriva den med "System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)".
- CS9346: Uppdateringen kräver att explicit gränssnittsimplementering genereras, vilket inte stöds av körningen utan att programmet startas om.
- CS9352: Målkörningen stöder inte utökade layouttyper.
De här felen skiljer sig från språkversionsfel eftersom det inte går att lösa dem med enbart uppgradering <LangVersion> . Målruntime-miljön (som anges av <TargetFramework>) måste också ha stöd för funktionen på CLR-/runtime-nivå.
Uppgradera <TargetFramework> i projektfilen till en version som stöder den funktion som krävs. I följande lista visas vilka funktioner som kräver vilken minsta körningstid:
- Standardimplementering av gränssnitt, inklusive skyddad åtkomst (CS8701, CS8702, CS8707): Kräver .NET Core 3.0/.NET 5+.
- Statiska abstrakta medlemmar i gränssnitt (CS8919, CS8929): Kräver .NET 7+.
- Covariant-returtyper (CS8830, CS8831): Kräver .NET 5+.
- Referensfält (CS9064): Kräver .NET 7+.
- Inline-matristyper (CS9171): Kräver .NET 8+.
- Generiska typer av typen by-ref-like (CS9240): Kräver .NET 9+.
- Utökade layouttyper (CS9352): Kräver .NET 10+.
- Utökningsbara samtalskonventioner (CS8889): Kräver .NET 5+.
- Asynkrona körningsfunktioner (CS9328): Kräver .NET 10+.
Uppdatera .NET SDK om själva kompilatorn inte stöder en nödvändig kompilatorfunktion (CS9041). Det här felet anger att ett refererat bibliotek använder metadatafunktioner som kräver en nyare kompilatorversion.
Se till att det finns en giltig referens till körningsmiljöns kärnbibliotek (CS8021). Den här varningen visas vanligtvis när du bygger utan en standardreferens till körmiljön. Ange ett RuntimeMetadataVersion alternativ eller lägg till en referens till en sammansättning som innehåller System.Object.
Lös RefSafetyRulesAttribute versionsmatchningar genom att kompilera om beroende moduler med en kompatibel kompilatorversion (CS9103).
Starta om programmet om det här felet uppstår under frekvent omläsning (CS9346). Vissa ändringar i Redigera och fortsätt kräver att programmet startas om eftersom körmiljön inte kan skapa de explicita gränssnittsimplementeringar som krävs dynamiskt.
Funktionspekare och anropskonventionsfel
- CS8888: "hanterad" anropskonvention kan inte kombineras med ohanterade anropskonventionsspecificerare.
- CS8889: Målmiljön stöder inte utökningsbara anropskonventioner eller standardanropskonventioner för körningsmiljön.
- CS8890: Typen "typ" har inte definierats.
- CS8891: Typen "typ" måste vara offentlig för att kunna användas som en anropskonvention.
Dessa fel gäller deklarationer av funktionspekare och deras anropskonventionsspecificerare, som introducerades i C# 9.
Ta bort managed från listor med anropskonventionsspecificerare som även innehåller ohanterade specificerare (CS8888).
managed Anropskonventionen är standard och kan inte kombineras med unmanaged specificerare som Cdecl, Stdcall, Thiscalleller Fastcall.
Uppgradera målramverket till .NET 5 eller senare för att använda utökningsbara eller körningsstandardanropskonventioner (CS889). Attributet UnmanagedCallersOnly och utökningsbara anropskonventiontyper kräver körningsstöd som inte är tillgängligt i .NET Core 3.1 eller tidigare.
Kontrollera att den anropande konventionstypen finns i de refererade sammansättningarna (CS8890). Anropskonventionstyper som CallConvCdecl, CallConvStdcall, CallConvThiscall och CallConvFastcall definieras i System.Runtime.CompilerServices. Om typen inte hittas lägger du till en referens till rätt körtidsbibliotek.
Skapa anpassade typer av anropskonventioner public (CS8891). Om du definierar en anpassad anropskonventionstyp deklarerar du den som public att den ska användas i en deklaration av funktionspekartyp.
Experimentella funktioner och förhandsversionsfunktioner
- CS8058: Funktionen "feature" är experimentell och stöds inte. Använd funktionen //för att aktivera funktionen.
- CS8305: "type" är endast i utvärderingssyfte och kan komma att ändras eller tas bort i framtida uppdateringar.
- CS8652: Funktionen är för närvarande i förhandsversion och stöds inte. Om du vill använda förhandsversionsfunktioner använder du språkversionen "förhandsversion".
- CS9204: "typ" är endast i utvärderingssyfte och kan komma att ändras eller tas bort i framtida uppdateringar. Ignorera den här diagnostiken för att fortsätta.
- CS9211: Argumentet diagnosticId till attributet "Experimental" måste vara en giltig identifierare.
- CS9268: "typ" är endast i utvärderingssyfte och kan komma att ändras eller tas bort i framtida uppdateringar: "meddelande". Ignorera den här diagnostiken för att fortsätta.
Den här diagnostiken anger att du använder en funktion eller typ som är markerad som experimentell eller endast är tillgänglig i förhandsversionen.
Varning
Experimentella funktioner kan komma att ändras. API:erna kan ändras eller tas bort i framtida uppdateringar. Att inkludera experimentella funktioner är ett sätt för biblioteksförfattare att få feedback om idéer och begrepp för framtida utveckling. Var mycket försiktig när du använder alla funktioner som markerats som experimentella.
Ange <LangVersion>preview</LangVersion> i projektfilen om du vill använda språkfunktioner i förhandsversion (CS8652). Förhandsversionsfunktionerna har ännu inte slutförts och kan komma att ändras i framtida versioner.
Utelämna det specifika diagnostik-ID:t för att bekräfta API:ets experimentella karaktär (CS8058, CS8305, CS9204, CS9268). Biblioteksförfattare markerar API:er med System.Diagnostics.CodeAnalysis.ExperimentalAttribute för att indikera att de kan komma att ändras. Du kan undertrycka diagnostiken med hjälp av #pragma warning disable eller genom att lägga till diagnostik-ID:t i <NoWarn> i din projektfil.
diagnosticId Kontrollera att argumentet till [Experimental] är en giltig C#-identifierare (CS9211). Identifieraren måste följa standardnamngivningsreglerna. Den får inte innehålla blanksteg, specialtecken eller börja med en siffra. Du kan också deklarera dina egna experimentella funktioner genom att använda System.Diagnostics.CodeAnalysis.ExperimentalAttribute.
Oförenliga ändringar vid struct-initiering
- CS0171, CS8881: Fältets namn måste tilldelas fullständigt innan kontrollen returneras till anroparen. Överväg att uppdatera till språkversionen "version" för att automatiskt standarda fältet.
- CS0188, CS8885: Det här objektet kan inte användas innan alla fält har tilldelats. Överväg att uppdatera till språkversionen "version" för att automatiskt standarda de otilldelade fälten.
- CS0843, CS8880: Den automatiskt implementerade egenskapen "name" måste tilldelas fullständigt innan kontrollen returneras till anroparen. Överväg att uppdatera till språkversionen "version" för att automatiskt standarda egenskapen.
- CS9014: Användning av den möjligen ej tilldelade automatiskt implementerade egenskapen "name". Överväg att uppdatera till språkversionen "version" för att ge egenskapen ett standardvärde automatiskt.
- CS9015: Användning av eventuellt otilldelat fält "namn". Överväg att uppdatera till språkversionen "version" för att automatiskt standarda fältet.
- CS9016: Användning av den möjligen otilldelade automatiskt implementerade egenskapen "name". Överväg att uppdatera till språkversionen "version" för att automatiskt ge egenskapen ett standardvärde.
- CS9017: Användning av eventuellt otilldelat fält "namn". Överväg att uppdatera till språkversionen "version" för att automatiskt standarda fältet.
Dessa fel och varningar hjälper till att säkerställa att struct typerna initieras korrekt innan fälten används. I tidigare versioner av C#måste du uttryckligen tilldela alla fält i en struct i någon konstruktor. Den parameterlösa konstruktorn initierar alla fält till standardvärdet. I senare versioner initierar alla konstruktorer alla fält. Antingen anges fältet explicit, anges i en fältinitierare eller anges till standardvärdet.
Uppgradera till C# 11 eller senare så att alla struct-konstruktorer automatiskt tilldelar standardvärden till alla fält (CS0171, CS0188, CS0843 och deras nyare motsvarigheter CS8880, CS8881, CS8885). Från och med C# 11 initierar kompilatorn automatiskt alla fält som inte uttryckligen anges i en konstruktor till deras standardvärden.
Anropa uttryckligen standardkonstruktorn med hjälp : this() av i din structkonstruktor om du inte kan uppgradera till C# 11 (CS0171, CS0188, CS0843). Den här metoden säkerställer att alla fält får sina standardvärden innan konstruktorns brödtext körs:
struct S
{
public int AIProp { get; set; }
public S(int i) : this() // Ensures all fields are initialized
{
AIProp = i;
}
}
Tilldela alla fält och automatiska egenskaper innan du använder this eller innan konstruktorn returnerar (CS9014, CS9015, CS9016, CS9017). Den här diagnostiken visas när en nyare kompilator upptäcker att du kanske läser en egenskap eller ett fält innan den har tilldelats. Tilldela antingen uttryckligen ett värde eller uppgradera till en version där automatisk standardinställning eliminerar varningen.
Implementeringsspecifika attribut
- CS9269: UnscopedRefAttribute är endast giltigt i C# 11 eller senare eller när du riktar in dig på net7.0 eller senare.
- CS9271: Typen "Microsoft. CodeAnalysis.EmbeddedAttribute måste vara icke-generisk, intern, icke-fil, förseglad, icke-statisk, ha en parameterlös konstruktor, ärver från System.Attribute och kunna tillämpas på alla typer.
Dessa fel gäller attribut som antingen är kompilatorgenererade eller knutna till specifika körningsversioner.
Uppgradera till C# 11 och .NET 7 eller senare för att använda UnscopedRefAttribute (CS9269). Det här attributet anger att en ref retur eller ref struct parameter inte har en begränsad livslängd. Det kräver både språkversionen och målramverket för att uppfylla minimikraven.
Deklarera inte Microsoft.CodeAnalysis.EmbeddedAttribute manuellt (CS9271). Kompilatorn genererar källan för det här attributet automatiskt när det behövs. Om du har en manuellt deklarerad typ med det här namnet tar du bort den eller byter namn på den för att undvika konflikter med den kompilatorgenererade versionen.