Možnosti kompilátoru C# pro pravidla jazykových funkcí

Následující možnosti určují, jak kompilátor interpretuje jazykové funkce. nová syntaxe MSBuild je zobrazena tučně. Starší syntaxe csc.exe se zobrazuje v code style .

  • CheckForOverflowUnderflow / -checked : generování kontrol přetečení.
  • AllowUnsafeBlocks / -unsafe : povolí nezabezpečený kód.
  • DefineConstants / -define : Definujte symboly podmíněné kompilace.
  • Langversion – / -langversion : zadejte jazykovou verzi default , například (nejnovější hlavní verzi) nebo latest (nejnovější verzi, včetně dílčích verzí).
  • Nullable / -nullable : Povolit kontext s možnou hodnotou null nebo upozornění s možnou hodnotou null.

CheckForOverflowUnderflow

Možnost CheckForOverflowUnderflow určuje, zda je celočíselný aritmetický příkaz, jehož výsledkem je hodnota, která je mimo rozsah datového typu, způsobuje výjimku za běhu.

<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>

Celočíselný aritmetický příkaz, který je v oboru checked unchecked klíčového slova nebo, nepodléhá efektu možnosti CheckForOverflowUnderflow . Pokud celočíselný aritmetický příkaz, který není v oboru checked unchecked klíčového slova nebo, má za následek hodnotu mimo rozsah datového typu a CheckForOverflowUnderflow je true , tento příkaz způsobí výjimku v době běhu. Pokud je CheckForOverflowUnderflow false , tento příkaz během běhu nezpůsobí výjimku. Výchozí hodnota této možnosti je false ; kontrola přetečení je zakázaná.

AllowUnsafeBlocks

Možnost kompilátoru AllowUnsafeBlocks umožňuje kód, který používá klíčové slovo unsafe ke kompilaci. Výchozí hodnota pro tuto možnost je false , což znamená, že nezabezpečený kód není povolen.

<AllowUnsafeBlocks>true</AllowUnsafeBlocks>

Další informace o nebezpečném kódu naleznete v tématu nezabezpečený kód a ukazatele.

DefineConstants

Možnost DefineConstants definuje symboly ve všech souborech zdrojového kódu vašeho programu.

<DefineConstants>name;name2</DefineConstants>

Tato možnost určuje názvy jednoho nebo více symbolů, které chcete definovat. Možnost DefineConstants má stejný účinek jako direktiva preprocesoru #define s tím rozdílem, že možnost kompilátoru je platná pro všechny soubory v projektu. Symbol zůstane definován ve zdrojovém souboru, dokud direktiva #undef ve zdrojovém souboru definici odstraní. Použijete-li -define možnost, #undef direktiva v jednom souboru nemá žádný vliv na jiné soubory zdrojového kódu v projektu. Můžete použít symboly vytvořené pomocí této možnosti s #if, #else, #elifa #endif ke podmíněnému kompilování zdrojových souborů. Kompilátor jazyka C# sám nedefinuje žádné symboly nebo makra, které lze použít ve zdrojovém kódu; všechny definice symbolů musí být definované uživatelem.

Poznámka

#defineDirektiva jazyka C# nepovoluje, aby se symbolu předala hodnota, jako v jazycích, jako je například C++. Například #define nelze použít k vytvoření makra nebo k definování konstanty. Pokud potřebujete definovat konstantu, použijte enum proměnnou. Chcete-li vytvořit makro stylu C++, zvažte alternativy jako obecné. Vzhledem k tomu, že makra jsou obvykle odlaďuje náchylné k chybám, C# nepovoluje jejich použití, ale poskytuje bezpečnější alternativy.

Langversion –

Způsobí, že kompilátor přijme pouze syntaxi, která je obsažena ve zvolené specifikaci jazyka C#.

<LangVersion>9.0</LangVersion>

Platné jsou následující hodnoty:

Hodnota Význam
preview Kompilátor přijímá všechny platné jazykové syntaxe z nejnovější verze Preview.
latest Kompilátor přijímá syntaxi z nejnovější vydané verze kompilátoru (včetně dílčí verze).
latestMajor (default) Kompilátor přijímá syntaxi z nejnovější vydané hlavní verze kompilátoru.
10.0 Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 10.0 nebo nižší.
9.0 Kompilátor přijímá pouze syntaxi, která je součástí jazyka C# 9.0 nebo nižší.
8.0 Kompilátor přijímá pouze syntaxi, která je součástí jazyka 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-2 (nebo 2). Kompilátor přijímá pouze syntaxi, která je součástí ISO/IEC 23270:2006 C# (2.0).
ISO-1 (nebo 1). Kompilátor přijímá pouze syntaxi, která je součástí ISO/IEC 23270:2003 C# (1.0/1.2).

výchozí jazyková verze závisí na cílové architektuře vaší aplikace a na nainstalované verzi sady SDK nebo Visual Studio. Tato pravidla jsou definována ve verzích jazyka C#.

Metadata odkazovaná v aplikaci jazyka C# nepodléhají možnosti kompilátoru langversion – .

Vzhledem k tomu, že každá verze kompilátoru jazyka C# obsahuje rozšíření jazykové specifikace, langversion – neposkytuje ekvivalentní funkce starší verze kompilátoru.

kromě toho i když se aktualizace verze C# obecně shodují s hlavními .NET Framework verzemi, nová syntaxe a funkce nemusí být nutně vázané na konkrétní verzi frameworku. i když nové funkce budou jednoznačně vyžadovat novou aktualizaci kompilátoru, která se také vydává společně s revizí C#, každá konkrétní funkce má své vlastní minimální požadavky na rozhraní .net API nebo modul clr (common language runtime), které by mohly umožňovat jeho spuštění v rámci architektury nižší verze, zahrnutím balíčků NuGet nebo jiných knihoven.

Bez ohledu na to, který langversion – nastavení použijete, použijte aktuální verzi modulu CLR (Common Language Runtime) a vytvořte .exe nebo .dll. Jedinou výjimkou jsou Friend sestavení a moduleassemblyname –, která pracují v rámci -langversion –: ISO-1.

Další způsoby určení verze jazyka C# naleznete v tématu Správa verzí jazyka c#.

Informace o tom, jak nastavit tuto možnost kompilátoru programově, najdete v tématu LanguageVersion .

specifikace jazyka C#

Verze Odkaz Description
C# 7,0 a novější Momentálně není k dispozici
C# 6,0 Propojit Specifikace jazyka C# verze 6 – neoficiální koncept: .NET Foundation
C# 5,0 Stáhnout PDF Standard ECMA-334 5. edice
C# 3,0 Stáhnout dokument Specifikace jazyka C# verze 3,0: Microsoft Corporation
C# 2,0 Stáhnout PDF Standard ECMA – 334 4. edice
C# 1,2 Stáhnout dokument Specifikace jazyka C# verze 1,2: Microsoft Corporation
C# 1,0 Stáhnout dokument Specifikace jazyka C# verze 1,0: Microsoft Corporation

Minimální verze sady SDK potřebná pro podporu všech funkcí jazyka

V následující tabulce je uveden minimální počet verzí sady SDK s kompilátorem jazyka C#, který podporuje odpovídající jazykovou verzi:

Verze C# Minimální verze sady SDK
C# 10,0 Microsoft Visual Studio/Build Tools 2022 nebo .net 6,0 SDK
C# 9.0 Microsoft Visual Studio/Build Tools 2019, verze 16,8 nebo .net 5,0 SDK
C# 8.0 Microsoft Visual Studio/Build Tools 2019, verze 16,3 nebo .net Core 3,0 SDK
C# 7.3 Microsoft Visual Studio/Build Tools 2017, verze 15,7
C# 7.2 Microsoft Visual Studio/Build Tools 2017, verze 15,5
C# 7.1 Microsoft Visual Studio/Build Tools 2017, verze 15,3
C# 7.0 Microsoft Visual Studio/Build Tools 2017
C# 6 Microsoft Visual Studio/Build Tools 2015
C# 5 Microsoft Visual Studio/Build Tools 2012 nebo .NET Framework 4,5 kompilátor
C# 4 Microsoft Visual Studio/Build Tools 2010 nebo .NET Framework 4,0 kompilátor
C# 3 Microsoft Visual Studio/Build Tools 2008 nebo .NET Framework 3,5 kompilátor
C# 2 Microsoft Visual Studio/Build Tools 2005 nebo .NET Framework 2,0 kompilátor
C# 1.0/1.2 Microsoft Visual Studio/Build Tools .net 2002 nebo .NET Framework 1,0 compiler

Vynulovatelné

Možnost s možnou hodnotou null umožňuje zadat kontext s možnou hodnotou null. Výchozí hodnota pro tuto možnost je disable .

<Nullable>enable</Nullable>

Argument musí být jedna z argumentů enable , disable , warnings nebo annotations . enableArgument umožňuje kontext s možnou hodnotou null. disablePři zadání se zakáže kontext s možnou hodnotou null. Při zadání warnings argumentu je povolen výstražný kontext s možnou hodnotou null. Při zadávání annotations argumentu je povolen kontext anotace s možnou hodnotou null.

analýza Flow slouží k odvození hodnoty null proměnných v rámci spustitelného kódu. Odvozená hodnota null proměnné je nezávislá na deklarované hodnotě null proměnné. Volání metod jsou analyzována i v případě, že jsou podmíněně vynechána. Například Debug.Assert v režimu vydání.

Vyvolání metod popsaných s následujícími atributy ovlivní také analýzu toků:

Důležité

Globální kontext s možnou hodnotou null neplatí pro vygenerované soubory kódu. Bez ohledu na toto nastavení je kontext s možnou hodnotou null zakázán pro jakýkoliv zdrojový soubor označený jako generovaný. Existují čtyři způsoby, proč je soubor označený jako generovaný:

  1. V souboru. editorconfig zadejte generated_code = true v části, která se vztahuje na daný soubor.
  2. Umístit <auto-generated> nebo <auto-generated/> do komentáře v horní části souboru. Může být na jakémkoli řádku tohoto komentáře, ale blok komentáře musí být prvním prvkem v souboru.
  3. Název souboru spusťte pomocí TemporaryGeneratedFile_
  4. Název souboru ukončete příponou. Designer. cs, . Generated. cs, . g. cs nebo . g. i. cs.

Generátory se můžou přihlásit pomocí #nullable direktivy preprocesoru.