Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se zabývá následujícími chybami a upozorněními kompilátoru:
- CS0171: Před vrácením řízení volajícímu musí být pole 'name' zcela přiřazeno. Zvažte aktualizaci na jazykovou verzi 'version', aby se poli automaticky přiřadila výchozí hodnota.
- CS0188: Objekt 'this' nelze použít před přiřazením hodnot všem jeho polím. Zvažte aktualizaci na jazykovou verzi 'version', aby se nepřiřazeným polím automaticky nastavily výchozí hodnoty.
- CS0843: Automaticky implementovaná vlastnost 'name' musí být plně přiřazena před vrácením řízení volajícímu. Zvažte aktualizaci na jazykovou verzi 'version', aby se pro vlastnost automaticky použila výchozí hodnota.
- CS1617: Neplatná možnost option pro /langversion. K výpisu podporovaných hodnot použijte /langversion:?
- CS1638: Identifikátor je vyhrazený identifikátor a nelze ho použít při použití režimu jazykové verze ISO.
- CS1738: Specifikace pojmenovaných argumentů musí být uvedeny po zadání všech pevných argumentů. Pokud chcete povolit jiné než koncové pojmenované argumenty, použijte jazyk verze 7.2 nebo vyšší.
- CS8021: Nebyla nalezena žádná hodnota modulu RuntimeMetadataVersion. Nebylo nalezeno žádné sestavení obsahující System.Object ani nebyla hodnota runtimeMetadataVersion určena prostřednictvím možností.
- CS8022: Funkce není dostupná v jazyce C# 1. Použijte prosím jazyk verze 2 nebo novější.
- CS8023: Funkce není dostupná v jazyce C# 2. Použijte prosím jazyk verze 3 nebo vyšší.
- CS8024: Funkce není dostupná v jazyce C# 3. Použijte prosím jazyk verze 4 nebo vyšší.
- CS8025: Funkce není dostupná v jazyce C# 4. Použijte prosím jazyk verze 5 nebo vyšší.
- CS8026: Funkce není dostupná v jazyce C# 5. Použijte prosím jazyk verze 6 nebo novější.
- CS8058: Funkce je experimentální a nepodporovaná. K povolení použijte funkci /features:feature.
- CS8059: Funkce není dostupná v jazyce C# 6. Použijte prosím jazyk verze 7 nebo vyšší.
- CS8107: Funkce není dostupná v jazyce C# 7.0. Použijte prosím jazyk verze 7.1 nebo novější.
- CS8192: Zadaná jazyková verze není podporována nebo je neplatná: hodnota.
- CS8302: Funkce není dostupná v jazyce C# 7.1. Použijte prosím jazyk verze 7.2 nebo novější.
- CS8303: Zadaná jazyková verze value nemůže mít počáteční nuly.
- CS8304: Verze kompilátoru: version. Verze jazyka: verze.
- CS8305: Typ je určen pouze pro účely vyhodnocení a v budoucích aktualizacích se může změnit nebo odebrat.
- CS8306: Název prvku tuple 'name' je odvozen. Pokud chcete získat přístup k prvku podle jeho odvozeného názvu, použijte verzi jazyka 7.1 nebo novější.
- CS8314: Výraz typu 'type' nelze zpracovat pomocí vzoru typu 'type' v jazyce C# verze 'version'. Použijte jazykovou verzi 'version' nebo vyšší.
- CS8320: Funkce není dostupná v jazyce C# 7.2. Použijte prosím jazyk verze 7.3 nebo novější.
- CS8370: Funkce není dostupná v jazyce C# 7.3. Použijte prosím jazyk verze 8 nebo vyšší.
- CS8371: Atributy cílené na pole pro automatické vlastnosti nejsou podporovány v jazyce verze 7.3. Použijte prosím jazyk verze 8.0 nebo novější.
- CS8400: Funkce není dostupná v jazyce C# 8. Použijte prosím jazyk verze 9 nebo novější.
- CS8401: Chcete-li pro interpolovaný doslovný řetězec použít znak @$, použijte jazykovou verzi 8.0 nebo vyšší.
- CS8511: Výraz typu 'type' nelze porovnat se vzorem typu 'type'. K porovnání otevřeného typu se vzorem konstanty použijte jazykovou verzi 'version' nebo novější.
- CS8627: Parametr typu s možnou hodnotou null musí být určen jako hodnotový typ nebo nenulovatelný odkazový typ, pokud se nepoužívá jazyková verze 'version' nebo vyšší. Zvažte změnu jazykové verze nebo přidání omezení 'class', 'struct' nebo omezení typu.
- CS8630: Neplatná hodnota možnosti 'option': 'value' pro jazykovou verzi C#. Použijte jazykovou verzi 'version' nebo vyšší.
- CS8652: Funkce je aktuálně ve verzi Preview a nepodporuje se. Pokud chcete používat funkce ve verzi Preview, použijte jazyková verze Preview.
- CS8701: Cílový modul runtime nepodporuje výchozí implementaci rozhraní.
- CS8702: „member“ nemůže implementovat člena rozhraní „member“ v typu „type“, protože cílové běhové prostředí nepodporuje výchozí implementaci rozhraní.
- CS8703: Modifikátor 'modifier' není pro tuto položku v této verzi jazyka C# platný. Použijte prosím jazykovou verzi 8.0 nebo vyšší.
- CS8704: 'type' neimplementuje člena rozhraní 'member'. 'type' nemůže implicitně implementovat neveřejného člena v této verzi jazyka C#. Použijte jazykovou verzi 'version' nebo vyšší.
- CS8706: Typ nemůže implementovat člen rozhraní v typu, protože tato funkce není v jazyce C# 7.3 k dispozici.
- CS8707: Cílové runtime nepodporuje úrovně přístupu „protected“, „protected internal“ ani „private protected“ u člena rozhraní.
- CS8773: Funkce není dostupná v jazyce C# 9. Použijte prosím jazyk verze 10 nebo novější.
- CS8830: Cílové prostředí runtime nepodporuje kovariantní návratové typy v přepsáních. Návratový typ musí být 'type', aby odpovídal přepsanému členu 'member'.
- CS8831: Cílové runtime nepodporuje kovariantní typy v přepsáních. Typ musí být „type“, aby odpovídal přepsanému členu „member“.
- CS8888: "spravovaná" konvence volání nelze kombinovat s nespravovanými specifikátory konvence volání.
- CS8889: Cílové běhové prostředí nepodporuje rozšiřitelnou konvenci volání ani výchozí konvenci volání běhového prostředí.
- CS8890: Typ 'type' není definován.
- CS8891: Typ "type" musí být veřejný, aby se používal jako konvence volání.
- CS8904: Neplatná odchylka: Parametr typu musí být u člena invariantně platný, pokud se nepoužívá jazyk verze 9.0 nebo vyšší.
- CS8912: Dědění záznamu s zapečetěným objektem Object.ToString není v jazyce C# 9.0 podporováno. Použijte prosím jazyk verze 10.0 nebo novější.
- CS8919: Cílový modul runtime nepodporuje statické abstraktní členy v rozhraních.
- CS8929: Metoda 'method' nemůže implementovat člena rozhraní 'member' v typu 'type', protože cílové runtime nepodporuje statické abstraktní členy v rozhraních.
- CS8936: Funkce není dostupná v jazyce C# 10. Použijte prosím jazyk verze 11 nebo novější.
- CS8957: Podmíněný výraz není v jazykové verzi 8.0 platný, protože mezi typem „type“ a „type“ nebyl nalezen společný typ. Pokud chcete použít konverzi odvozenou z cílového typu, přejděte na jazykovou verzi 9.0 nebo novější.
- CS8967: Nové řádky uvnitř interpolovaného řetězce bez doslovného zápisu nejsou v jazyce C# 10.0 podporovány. Použijte prosím verzi jazyka 11.0 nebo novější.
- CS9014: Použití pravděpodobně nepřiřazené automaticky implementované vlastnosti „name“. Zvažte aktualizaci na jazykovou verzi „version“, aby se vlastnosti automaticky přiřadila výchozí hodnota.
- CS9015: Použití pole „name“, které možná není přiřazené. Zvažte aktualizaci na jazykovou verzi 'version', aby se pole automaticky nastavilo na výchozí hodnotu.
- CS9016: Použití pravděpodobně nepřiřazené automaticky implementované vlastnosti „name“. Zvažte aktualizaci na jazykovou verzi „version“, aby se vlastnost automaticky inicializovala na výchozí hodnotu.
- CS9017: Použití pravděpodobně neinicializovaného pole 'name'. Zvažte aktualizaci na jazykovou verzi 'version', aby se poli automaticky přiřadila výchozí hodnota.
- CS9041: Typ vyžaduje funkci kompilátoru "feature", kterou tato verze kompilátoru jazyka C# nepodporuje.
- CS9058: Funkce není dostupná v jazyce C# 11. Použijte prosím jazyk verze 12 nebo novější.
- CS9064: Cílové běhové prostředí nepodporuje pole typu ref.
- CS9103: Typ je definován v modulu s nerozpoznanou verzí RefSafetyRulesAttribute, která očekává "11".
- CS9171: Cílový modul runtime nepodporuje vložené typy polí.
- CS9194: Argument nelze předat s klíčovým slovem 'ref'. Chcete-li předat argumenty 'ref' parametrům 'in', upgradujte na jazykovou verzi 12 nebo vyšší.
- CS9202: Funkce není dostupná v jazyce C# 12.0. Použijte prosím jazyk verze 13 nebo novější.
- CS9204: Typ je určen pouze pro účely vyhodnocení a v budoucích aktualizacích se může změnit nebo odebrat. Chcete-li pokračovat, potlačíte tuto diagnostiku.
- CS9211: Argument diagnosticId atributu 'Experimental' musí být platný identifikátor.
- CS9240: Cílový modul runtime nepodporuje obecné typy podobné odkazu.
- CS9260: Funkce není dostupná v jazyce C# 13.0. Použijte prosím jazyk verze 14 nebo vyšší.
- CS9268: Typ je určen pouze pro účely vyhodnocení a v budoucích aktualizacích se může změnit nebo odebrat: zpráva. Chcete-li pokračovat, potlačíte tuto diagnostiku.
- CS9269: UnscopedRefAttribute je platný pouze v jazyce C# 11 nebo novějším nebo při cílení na net7.0 nebo novější.
- CS9271: Typ 'Microsoft. CodeAnalysis.EmbeddedAttribute musí být ne generické, interní, nesouborové, zapečetěné, nestatické, mají konstruktor bez parametrů, dědí z System.Attribute a musí být možné použít na jakýkoli typ.
- CS9327: Tato funkce není k dispozici v jazyce C# 14.0. Použijte jazykovou verzi 'version' nebo novější.
- CS9328: Metoda používá funkci, která není aktuálně podporována asynchronním modulem runtime. Odhlaste metodu mimo asynchronní modul runtime tím, že ji přiřazujete pomocí System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false).
- CS9346: Aktualizace vyžaduje generování explicitní implementace rozhraní, která není podporována modulem runtime bez restartování aplikace.
- CS9352: Cílový modul runtime nepodporuje rozšířené typy rozložení.
Příčinou všech těchto chyb a upozornění je, že kompilátor nebo modul runtime nepodporuje funkci, kterou používáte. Řešení závisí na tom, jestli se jedná o problém s konfigurací jazykové verze, neshodu verzí jazyka, omezení modulu runtime nebo experimentální funkci.
Chyby v konfiguraci jazykové verze
- CS1617: Neplatná možnost option pro /langversion. K výpisu podporovaných hodnot použijte /langversion:?
- CS1638: Identifikátor je vyhrazený identifikátor a nelze ho použít při použití režimu jazykové verze ISO.
- CS8192: Zadaná jazyková verze není podporována nebo je neplatná: hodnota.
- CS8303: Zadaná jazyková verze value nemůže mít počáteční nuly.
- CS8304: Verze kompilátoru: version. Verze jazyka: verze.
Tyto chyby značí, že <LangVersion> nastavení v souboru projektu nebo možnost kompilátoru -langversion je neplatná nebo nekompatibilní s nainstalovaným kompilátorem.
<LangVersion> Opravte hodnotu v souboru projektu na platný řetězec verze jazyka (CS1617, CS8192, CS8303). Platné hodnoty zahrnují default, , latest, preview, latestMajornebo konkrétní číslo verze, například 7.3, 8.0, 9.0, 10, 11, 12, , 13nebo 14. Do čísla verze nezahrnujte úvodní nuly. Úplný seznam podporovaných hodnot najdete v tématu Správa verzí jazyka C# .
Tip
Pokud chcete zobrazit seznam podporovaných jazykových verzí, před sestavením použijte tabulku v tomto článku, zkompilujte ji nebo -langversion:?dočasně nastavte <LangVersion>?</LangVersion> v souboru projektu.
Aktualizujte sadu .NET SDK na verzi, jejíž kompilátor podporuje zadanou jazykovou verzi (CS8304). Každá verze kompilátoru jazyka C# podporuje jazykové verze až do konkrétního maxima. Pokud zadáte novější jazykovou verzi, než podporuje kompilátor, upgradujte sadu SDK.
Odeberte identifikátory s dvojitým podtržítkem nebo změňte jazykovou verzi z ISO-1 nebo ISO-2 na novější verzi (CS1638). Režimy jazyka ISO si vyhražují identifikátory obsahující __ (dvojité podtržítka), protože nevyhovují specifikaci ISO C#.
Note
Aktuální kompilátor jazyka C# už nevygeneruje CS1638. Starší kompilátory hlásily tuto chybu při použití verzí jazyka ISO-1 nebo ISO-2.
Kompilátor určuje výchozí jazykovou verzi z cílové architektury:
| Cíl | Verze | Výchozí verze jazyka C# |
|---|---|---|
| platforma .NET | 11.x | C# 15 |
| platforma .NET | 10.x | C# 14 |
| platforma .NET | 9.x | C# 13 |
| platforma .NET | 8.x | C# 12 |
| platforma .NET | 7.x | C# 11 |
| platforma .NET | 6.x | C# 10 |
| platforma .NET | 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 | vše | C# 7.3 |
Pokud odeberete LangVersion prvek ze souboru projektu, kompilátor použije výchozí hodnotu pro cílovou architekturu. Můžete také zadat konkrétní verzi pro povolení novějších funkcí:
| Hodnota | Význam |
|---|---|
preview |
Kompilátor přijímá veškerou platnou syntaxi jazyka z nejnovější verze Preview. |
latest |
Kompilátor přijímá syntaxi z nejnovější oficiálně vydané verze kompilátoru (včetně všech podverzí). |
latestMajornebo default |
Kompilátor přijímá syntaxi z nejnovější vydané hlavní verze kompilátoru. |
15.0 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 15 nebo nižší. |
14.0 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 14 nebo nižší. |
13.0 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 13 nebo nižší. |
12.0 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 12 nebo nižší. |
11.0 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 11 nebo nižší. |
10.0 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 10 nebo nižší. |
9.0 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 9 nebo nižší. |
8.0 |
Kompilátor přijímá pouze syntaxi, která je součástí C# 8.0 nebo nižší. |
7.3 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 7.3 nebo nižší. |
7.2 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 7.2 nebo nižší. |
7.1 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 7.1 nebo nižší. |
7 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 7.0 nebo nižší. |
6 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 6.0 nebo nižší. |
5 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 5.0 nebo nižší. |
4 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 4.0 nebo nižší. |
3 |
Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 3.0 nebo nižší. |
ISO-2nebo 2 |
Kompilátor přijímá pouze syntaxi, která je součástí ISO/IEC 23270:2006 C# (2.0). |
ISO-1nebo 1 |
Kompilátor přijímá pouze syntaxi, která je součástí ISO/IEC 23270:2003 C# (1.0/1.2). |
Další informace o jazykových verzích podporovaných pro každou verzi architektury najdete v části Konfigurace jazykové verze v referenční části jazyka.
Funkce není dostupná ve verzi jazyka
- CS1738: Specifikace pojmenovaných argumentů musí být uvedeny po zadání všech pevných argumentů.
- CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058, CS9202, CS9260, CS9260, CS9327: Funkce není dostupná v jazyce C# X. Použijte prosím jazyková verze Y nebo vyšší.
- CS8306: Název prvku n-tice je odvozen. Pokud chcete získat přístup k prvku podle jeho odvozeného názvu, použijte jazykovou verzi 7.1 nebo novější.
- CS8314: Výraz typu 'type' nelze zpracovat vzorem typu 'type' ve verzi C# 'version'. Použijte prosím jazykovou verzi 'version' nebo vyšší.
- CS8371: Atributy cílené na pole pro automatické vlastnosti nejsou podporovány v jazyce verze 7.3.
- CS8401: Chcete-li pro interpolovaný doslovný řetězec použít znak @$, použijte jazykovou verzi 8.0 nebo vyšší.
- CS8511: Výraz typu ‚type‘ nelze zpracovat vzorem typu ‚type‘. K porovnání otevřeného typu s konstantním vzorem použijte jazykovou verzi ‚version‘ nebo novější.
- CS8627: Parametr typu s možnou hodnotou null musí být znám jako hodnotový typ nebo nenulovatelný odkazový typ, pokud se nepoužívá jazyková verze 'version' nebo vyšší. Zvažte změnu jazykové verze nebo přidání omezení 'class', 'struct' nebo omezení typu.
- CS8630: Neplatná hodnota možnosti 'option': 'value' pro verzi C#. Použijte prosím jazykovou verzi 'version' nebo vyšší.
- CS8703: Modifikátor 'modifier' není pro tuto položku v této verzi C# platný.
- CS8704: 'type' neimplementuje člen rozhraní 'member'. Type nemůže implicitně implementovat neveřejný člen.
- CS8706: Typ nemůže implementovat člen rozhraní, protože funkce není v této verzi k dispozici.
- CS8904: Neplatná odchylka: Parametr typu musí být u člena invariantně platný, pokud se nepoužívá jazyk verze 9.0 nebo vyšší.
- CS8912: Dědění záznamu s zapečetěným objektem Object.ToString není v jazyce C# 9.0 podporováno.
- CS8957: Podmíněný výraz není platný v jazyce verze 8.0, protože mezi typy nebyl nalezen běžný typ.
- CS8967: Nové řádky uvnitř neverbatimového interpolovaného řetězce nejsou v C# 10.0 podporovány.
- CS9194: Argument nelze předat s klíčovým slovem 'ref'. Chcete-li předat argumenty 'ref' parametrům 'in', upgradujte na jazykovou verzi 12 nebo vyšší.
Všechny tyto chyby naznačují, že používáte jazykový prvek, který vyžaduje novější verzi jazyka C#, než na kterou váš projekt aktuálně cílí. Pokud chcete tyto chyby vyřešit, použijte jednu z následujících možností:
Upgradujte cílovou architekturu, aby kompilátor automaticky vybral požadovanou verzi jazyka. Každému cílovému frameworku odpovídá výchozí verze jazyka C#. Například .NET 8 ve výchozím nastavení používá C# 12, .NET 9 ve výchozím nastavení používá C# 13 a .NET 10 ve výchozím nastavení používá C# 14. Úplné mapování najdete v tabulce Chyby konfigurace jazykové verze.
Nastavte
<LangVersion>prvek v souboru projektu na požadovanou verzi nebo vyšší. Pokud například chcete povolit funkce jazyka C# 12, přidejte<LangVersion>12</LangVersion>do<PropertyGroup>souboru projektu.
Pokud nemůžete upgradovat, vyhněte se funkci, která chybu aktivovala. Chybová zpráva pojmenuje funkci a požadovanou verzi. Následující seznam obsahuje další kontext pro konkrétní chyby:
- Pro všechny argumenty použijte explicitně pojmenované argumenty nebo upgradujte na C# 7.2 nebo novější, abyste mohli použít jiné než koncové pojmenované argumenty (CS1738).
- Přistupujte k prvkům řazené kolekce pomocí jejich deklarovaného názvu, nikoli odvozeného názvu, nebo upgradujte na C# 7.1 nebo novější (CS8306).
- Použijte
$@"..."místo@$"..."pro interpolované doslovné řetězce ve verzích C# před 8.0 (CS8401). - Přidejte explicitní omezení typu k parametrům typu s možnou hodnotou null nebo upgradujte na C# 9 nebo novější, což uvolní tento požadavek (CS8627).
- Upgradujte na C# 8.0 nebo novější, abyste povolili poznámky s možnou hodnotou null a kontext s možnou hodnotou null (CS8630).
- Přidejte explicitní přetypování v podmíněných výrazech, ve kterých dvě větve nemají společný typ, nebo upgradujte na C# 9 nebo novější verzi pro podmíněné výrazy s cílovým typem (CS8957).
- Přesuňte nové čáry mimo interpolované řetězcové výrazy nebo upgradujte na C# 11 nebo novější (CS8967).
-
inMísto předávání argumentů parametrůrefpoužijte klíčové slovoinnebo upgradujte na C# 12 nebo novější (CS9194). - Implementujte nepřístupné členy rozhraní explicitně místo implicitně nebo upgradujte na C# 9 nebo novější (CS8704).
Cílový modul runtime nepodporuje funkci
- CS8021: Nebyla nalezena žádná hodnota modulu RuntimeMetadataVersion.
- CS8701: Cílový modul runtime nepodporuje výchozí implementaci rozhraní.
- CS8702: 'member' nemůže implementovat člen rozhraní v typu, protože cílové běhové prostředí nepodporuje výchozí implementaci v rozhraní.
- CS8707: Cílové runtime prostředí nepodporuje přístupnost „protected“, „protected internal“ ani „private protected“ u člena rozhraní.
- CS8830: Cílové runtime nepodporuje kovariantní návratové typy v přepisech.
- CS8831: Cílové běhové prostředí nepodporuje kovariantní typy v přepsaných členech.
- CS8889: Cílové běhové prostředí nepodporuje rozšiřitelné konvence volání ani výchozí konvence volání běhového prostředí.
- CS8919: Cílové prostředí runtime nepodporuje statické abstraktní členy v rozhraních.
- CS8929: 'method' nemůže implementovat člena rozhraní 'member' v typu 'type', protože cílové runtime prostředí nepodporuje statické abstraktní členy v rozhraních.
- CS9041: Typ vyžaduje funkci kompilátoru "feature", kterou tato verze kompilátoru jazyka C# nepodporuje.
- CS9064: Cílový modul runtime nepodporuje pole ref.
- CS9103: Typ je definován v modulu s nerozpoznanou verzí RefSafetyRulesAttribute, která očekává "11".
- CS9171: Cílový modul runtime nepodporuje vložené typy polí.
- CS9240: Cílové prostředí runtime nepodporuje obecné typy s odkazovým typem.
- CS9328: Metoda používá funkci, která není aktuálně podporována asynchronním modulem runtime. Odhlaste metodu mimo asynchronní modul runtime tím, že ji přiřazujete pomocí System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false).
- CS9346: Aktualizace vyžaduje generování explicitní implementace rozhraní, která není podporována modulem runtime bez restartování aplikace.
- CS9352: Cílové běhové prostředí nepodporuje rozšířené typy rozložení.
Tyto chyby se liší od chyb jazykových verzí, protože samotný upgrade <LangVersion> je nevyřeší. Cílové runtime (zadané pomocí <TargetFramework>) musí tuto funkci podporovat také na úrovni CLR/runtime.
<TargetFramework> Upgradujte soubor projektu na verzi, která podporuje požadovanou funkci. Následující seznam uvádí, které funkce vyžadují jaké minimální běhové prostředí:
- Výchozí implementace rozhraní, včetně chráněného přístupu (CS8701, CS8702, CS8707): Vyžaduje .NET Core 3.0 / .NET 5+.
- Statické abstraktní členy v rozhraních (CS8919, CS8929): Vyžaduje .NET 7+.
- Kovariantní návratové typy (CS8830, CS8831): Vyžaduje .NET 5+.
- Referenční pole (CS9064): Vyžaduje .NET 7 nebo novější.
- Vložené typy polí (CS9171): Vyžaduje .NET 8+.
- Generické typy podobné typům předávaným odkazem (CS9240): Vyžaduje .NET 9 nebo vyšší.
- Rozšířené typy rozložení (CS9352): Vyžaduje .NET 10+.
- Rozšiřitelné konvence volání (CS8889): Vyžaduje .NET 5 nebo novější.
- Asynchronní funkce modulu runtime (CS9328): Vyžaduje .NET 10 nebo novější.
Aktualizujte sadu .NET SDK, pokud samotný kompilátor nepodporuje požadovanou funkci kompilátoru (CS9041). Tato chyba značí, že odkazovaná knihovna používá funkce metadat, které vyžadují novější verzi kompilátoru.
Ujistěte se, že existuje platný odkaz na základní knihovnu modulu runtime (CS8021). Toto upozornění se obvykle zobrazí při sestavování bez odkazu na standardní modul runtime.
RuntimeMetadataVersion Zadejte možnost nebo přidejte odkaz na sestavení obsahující System.Object.
Řešení RefSafetyRulesAttribute neshod verzí rekompilováním závislých modulů s kompatibilní verzí kompilátoru (CS9103)
Pokud při hot reloadu dojde k této chybě (CS9346), restartujte aplikaci. Některé změny úprav a pokračování vyžadují restartování, protože modul runtime nemůže dynamicky generovat požadované explicitní implementace rozhraní.
Chyby ukazatele funkce a konvence volání
- CS8888: "spravovaná" konvence volání nelze kombinovat s nespravovanými specifikátory konvence volání.
- CS8889: Cílové běhové prostředí nepodporuje rozšiřitelné ani výchozí konvence volání běhového prostředí.
- CS8890: Typ 'type' není definován.
- CS8891: Typ "type" musí být veřejný, aby se používal jako konvence volání.
Tyto chyby se týkají deklarací ukazatelů funkce a specifikátorů konvence volání zavedených v jazyce C# 9.
Odeberte managed ze seznamů specifikátorů konvence volání, které obsahují také nespravované specifikátory (CS8888). Konvence volání managed je výchozí a nelze ji kombinovat se specifikátory unmanaged, jako jsou Cdecl, Stdcall, Thiscall nebo Fastcall.
Upgradujte cílovou architekturu na .NET 5 nebo novější, abyste mohli používat rozšiřitelné nebo výchozí konvence volání za běhu (CS8889). Atribut UnmanagedCallersOnly a rozšiřitelné typy konvencí volání vyžadují podporu modulu runtime, která není dostupná v .NET Core 3.1 nebo starším.
Ujistěte se, že v odkazovaných sestaveních (CS8890) existuje typ konvence volání. Typy volacích konvencí, jako jsou CallConvCdecl, CallConvStdcall, CallConvThiscall a CallConvFastcall, jsou definovány v System.Runtime.CompilerServices. Pokud se typ nenajde, přidejte odkaz na správnou knihovnu modulu runtime.
Vytváření vlastních typů public konvencí volání (CS8891) Pokud definujete vlastní typ konvence volání, deklarujte jej jako public, abyste jej mohli použít v deklaraci typu ukazatele na funkci.
Experimentální a předběžné funkce
- CS8058: Funkce je experimentální a nepodporovaná. K povolení použijte funkci /features:feature.
- CS8305: Typ je určen pouze pro účely vyhodnocení a v budoucích aktualizacích se může změnit nebo odebrat.
- CS8652: Funkce je aktuálně ve verzi Preview a nepodporuje se. Pokud chcete používat funkce ve verzi Preview, použijte jazyková verze Preview.
- CS9204: Typ je určen pouze pro účely vyhodnocení a v budoucích aktualizacích se může změnit nebo odebrat. Chcete-li pokračovat, potlačíte tuto diagnostiku.
- CS9211: Argument diagnosticId atributu 'Experimentální' musí být platný identifikátor.
- CS9268: Typ je určen pouze pro účely vyhodnocení a v budoucích aktualizacích se může změnit nebo odebrat: zpráva. Chcete-li pokračovat, potlačíte tuto diagnostiku.
Tato diagnostika značí, že používáte funkci nebo typ označený jako experimentální nebo je k dispozici pouze ve verzi Preview.
Varování
Experimentální funkce se můžou změnit. Rozhraní API se můžou změnit nebo se můžou v budoucích aktualizacích odebrat. Zahrnutí experimentálních funkcí je způsob, jak autorům knihoven získat zpětnou vazbu k nápadům a konceptům pro budoucí vývoj. Při použití jakékoli funkce označené jako experimentální používejte extrémní opatrnost.
Nastavte <LangVersion>preview</LangVersion> v souboru projektu, chcete-li použít preview funkce jazyka (CS8652). Funkce ve verzi Preview ještě nejsou dokončené a v budoucích verzích se můžou změnit.
Potlačte konkrétní ID diagnostiky, abyste potvrdili experimentální povahu rozhraní API (CS8058, CS8305, CS9204, CS9268). Autoři knihoven označují API pomocí System.Diagnostics.CodeAnalysis.ExperimentalAttribute, aby dali najevo, že se mohou změnit. Diagnostiku můžete potlačit použitím #pragma warning disable nebo přidáním ID diagnostiky do <NoWarn> souboru projektu.
Ujistěte se, že argument pro [Experimental]diagnosticId je platný identifikátor jazyka C# (CS9211). Identifikátor musí dodržovat standardní pravidla pojmenování. Nemůže obsahovat mezery, speciální znaky ani začínat číslicí. Můžete také deklarovat vlastní experimentální funkce pomocí nástroje System.Diagnostics.CodeAnalysis.ExperimentalAttribute.
Změny narušující zpětnou kompatibilitu při inicializaci struktury
- CS0171, CS8881: Pole 'name' musí být před navrácením řízení volajícímu zcela přiřazeno. Zvažte aktualizaci na jazykovou verzi 'version', aby se pro pole automaticky použila výchozí hodnota.
- CS0188, CS8885: Objekt „this“ nelze použít před přiřazením všech jeho polí. Zvažte aktualizaci na jazykovou verzi „version“, aby se nepřiřazená pole automaticky nastavila na výchozí hodnoty.
- CS0843, CS8880: Automaticky implementovaná vlastnost 'name' musí být zcela inicializována před předáním řízení volajícímu. Zvažte aktualizaci na jazykovou verzi 'version', aby se pro vlastnost automaticky použila výchozí hodnota.
- CS9014: Použití pravděpodobně nepřiřazené automaticky implementované vlastnosti 'name'. Zvažte aktualizaci na jazykovou verzi 'version', aby se vlastnosti automaticky přiřadila výchozí hodnota.
- CS9015: Použití pole „name“, které možná není přiřazeno. Zvažte aktualizaci na jazykovou verzi „version“, aby se poli automaticky přiřadila výchozí hodnota.
- CS9016: Použití pravděpodobně nepřiřazené automaticky implementované vlastnosti 'name'. Zvažte aktualizaci na jazykovou verzi 'version', aby se vlastnosti automaticky přiřadila výchozí hodnota.
- CS9017: Použití pravděpodobně nepřiřazeného pole 'name'. Zvažte aktualizaci na jazykovou verzi 'version', aby se pro toto pole automaticky použila výchozí hodnota.
Tyto chyby a varování pomáhají zajistit, aby typy struct byly správně inicializovány předtím, než se přistoupí k jejich polím. V dřívějších verzích jazyka C# musíte explicitně přiřadit všechna pole ve struktuře v libovolném konstruktoru. Konstruktor bez parametrů inicializuje všechna pole na výchozí hodnotu. V novějších verzích inicializují všechny konstruktory všechna pole. Buď je pole explicitně nastaveno, nastaveno v inicializátoru pole nebo nastaveno na výchozí hodnotu.
Upgradujte na C# 11 nebo novější, aby všechny konstruktory automaticky nastavily všechna struct pole (CS0171, CS0188, CS0843 a jejich novější protějšky CS8880, CS8881, CS8885). Počínaje jazykem C# 11 kompilátor automaticky inicializuje všechna pole, která nejsou explicitně nastavená v konstruktoru, na výchozí hodnoty.
Explicitně volejte výchozí konstruktor pomocí : this() konstruktoru struktury, pokud nemůžete upgradovat na C# 11 (CS0171, CS0188, CS0843). Tento přístup zajišťuje, že všechna pole budou mít přiřazeny výchozí hodnoty dříve, než se spustí tělo konstruktoru:
struct S
{
public int AIProp { get; set; }
public S(int i) : this() // Ensures all fields are initialized
{
AIProp = i;
}
}
Přiřaďte všechna pole a automaticky implementované vlastnosti před použitím this nebo před návratem z konstruktoru (CS9014, CS9015, CS9016, CS9017). Tyto diagnostické zprávy se zobrazí, když novější kompilátor zjistí, že se možná pokoušíte číst vlastnost nebo pole dříve, než jim byla přiřazena hodnota. Buď explicitně přiřaďte hodnotu nebo upgradujte na verzi, kde automatické výchozí nastavení eliminuje upozornění.
Atributy specifické pro implementaci
- CS9269: UnscopedRefAttribute je platný pouze v jazyce C# 11 nebo novějším nebo při cílení na net7.0 nebo novější.
- CS9271: Typ 'Microsoft. CodeAnalysis.EmbeddedAttribute musí být ne generické, interní, nesouborové, zapečetěné, nestatické, mají konstruktor bez parametrů, dědí z System.Attribute a musí být možné je použít na libovolný typ.
Tyto chyby se týkají atributů, které jsou buď generovány kompilátorem, nebo svázané s konkrétními verzemi modulu runtime.
Upgradujte na C# 11 a .NET 7 nebo novější a použijte UnscopedRefAttribute (CS9269). Tento atribut označuje, že návratová hodnota ref ani parametr ref struct nemají životnost vázanou na rozsah platnosti. Vyžaduje verzi jazyka i cílovou architekturu, aby splňovaly minimální požadavky.
Nedeklarujte ručně Microsoft.CodeAnalysis.EmbeddedAttribute (CS9271). Kompilátor vygeneruje zdroj pro tento atribut automaticky v případě potřeby. Pokud máte ručně deklarovaný typ s tímto názvem, odeberte ho nebo ho přejmenujte, abyste zabránili konfliktu s verzí vygenerovanou kompilátorem.