Megosztás a következőn keresztül:


C#-fordító beállításai a nyelvi funkciók szabályaihoz

Az alábbi beállítások szabályozzák, hogy a fordító hogyan értelmezi a nyelvi funkciókat. Az új MSBuild szintaxis félkövér formátumban jelenik meg. A régebbi csc.exe szintaxis a .code style

  • CheckForOverflowUnderflow / -checked: Túlcsordulási ellenőrzések létrehozása.
  • AllowUnsafeBlocks / -unsafe: A "nem biztonságos" kód engedélyezése.
  • DefineConstants / -define: Feltételes fordítási szimbólum(ok) definiálása.
  • LangVersion / -langversion: Adja meg az olyan nyelvi verziókat, mint default a (legújabb főverzió) vagy latest a (legújabb verzió, beleértve az alverziókat is).
  • Null értékű / -nullable: Null értékű környezet vagy null értékű figyelmeztetések engedélyezése.

CheckForOverflowUnderflow

A CheckForOverflowUnderflow beállítás szabályozza az alapértelmezett túlcsordulás-ellenőrzési környezetet, amely meghatározza a program viselkedését egész számtani túlcsordulások esetén.

<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>

A CheckForOverflowUnderflowtrueesetén az alapértelmezett környezet egy ellenőrzött környezet, és a túlcsordulás ellenőrzése engedélyezve van, ellenkező esetben az alapértelmezett környezet egy nem ellenőrzött környezet. Ennek a beállításnak az falsealapértelmezett értéke az, hogy a túlcsordulás ellenőrzése le van tiltva.

A kód részeinek túlcsordulás-ellenőrzési környezetét is explicit módon szabályozhatja az és unchecked az checked utasítások használatával.

A túlcsordulás-ellenőrzési környezet a műveletekre és az érintett műveletekre gyakorolt hatásáról a cikkből és unchecked az utasításokból checkedtájékozódhat.

AllowUnsafeBlocks

Az AllowUnsafeBlocks fordítóbeállítás lehetővé teszi a nem biztonságos kulcsszót használó kód fordítását. Ennek a beállításnak az alapértelmezett értéke, falsevagyis a nem biztonságos kód nem engedélyezett.

<AllowUnsafeBlocks>true</AllowUnsafeBlocks>

A nem biztonságos kódról további információt a Nem biztonságos kód és a Mutatók című témakörben talál.

DefineConstants

A DefineConstants beállítás szimbólumokat határoz meg a program összes forráskódfájljában.

<DefineConstants>name;name2</DefineConstants>

Ez a beállítás egy vagy több definiálni kívánt szimbólum nevét adja meg. A DefineConstants beállításnak ugyanaz a hatása, mint a #define előfeldolgozási irányelvnek, azzal a kivételével, hogy a fordító beállítás a projekt összes fájlja esetében érvényben van. A szimbólumok a forrásfájlban maradnak definiálva, amíg a forrásfájlban lévő #undef direktíva el nem távolítja a definíciót. Ha ezt a -define lehetőséget választja, #undef az egyik fájlban lévő direktíva nincs hatással a projekt más forráskódfájljaira. Az ebben a beállításban létrehozott szimbólumokat #if, #else, #elif és #endif használhatja a forrásfájlok feltételes fordításához. Maga a C#-fordító nem definiál szimbólumokat vagy makrókat, amelyeket a forráskódban használhat; minden szimbólumdefiníciónak felhasználó által definiáltnak kell lennie.

Feljegyzés

A C# #define direktíva nem teszi lehetővé, hogy a szimbólumok értéket adjanak, például a C++-ban. Nem használható például #define makró létrehozására vagy konstans definiálására. Ha konstanst szeretne definiálni, használjon egy változót enum . Ha C++ stílusú makrót szeretne létrehozni, fontolja meg az olyan alternatívákat, mint az általánosak. Mivel a makrók közismerten hibalehetőséget jelentenek, a C# letiltja a használatát, de biztonságosabb alternatívákat kínál.

LangVersion

A C# fordító alapértelmezett nyelvi verziója az alkalmazás cél keretrendszerétől és a telepített SDK vagy Visual Studio verziójától függ. Ezek a szabályok a C#-nyelv verziószámozásában vannak definiálva.

A LangVersion beállítás hatására a fordító csak a megadott C# nyelvspecifikációban szereplő szintaxist fogadja el, például:

<LangVersion>9.0</LangVersion>

A következő értékek érvényesek:

Érték Értelmezés
preview A fordító a legújabb előzetes verzió összes érvényes nyelvszintaxisát elfogadja.
latest A fordító elfogadja a fordító legújabb kiadású verziójának szintaxisát (beleértve az alverziót is).
latestMajor
vagy default
A fordító elfogadja a fordító legújabb főverziójának szintaxisát.
12.0 A fordító csak a C# 12 vagy annál alacsonyabb szintaxist fogadja el.
11.0 A fordító csak a C# 11 vagy annál alacsonyabb szintaxist fogadja el.
10.0 A fordító csak a C# 10 vagy annál alacsonyabb szintaxist fogadja el.
9.0 A fordító csak a C# 9 vagy annál alacsonyabb szintaxist fogadja el.
8.0 A fordító csak a C# 8.0 vagy annál alacsonyabb szintaxist fogadja el.
7.3 A fordító csak a C# 7.3 vagy annál alacsonyabb szintaxist fogadja el.
7.2 A fordító csak a C# 7.2-ben vagy annál alacsonyabb szintaxist fogadja el.
7.1 A fordító csak a C# 7.1 vagy annál alacsonyabb szintaxist fogadja el.
7 A fordító csak a C# 7.0-s vagy újabb verziójában szereplő szintaxist fogadja el.
6 A fordító csak a C# 6.0 vagy annál alacsonyabb szintaxist fogadja el.
5 A fordító csak a C# 5.0-s vagy újabb verziójában szereplő szintaxist fogadja el.
4 A fordító csak a C# 4.0-s vagy újabb verziójában szereplő szintaxist fogadja el.
3 A fordító csak a C# 3.0-s vagy újabb verziójában szereplő szintaxist fogadja el.
ISO-2
vagy 2
A fordító csak az ISO/IEC 23270:2006 C# (2.0) szabványban foglalt szintaxist fogadja el.
ISO-1
vagy 1
A fordító csak az ISO/IEC 23270:2003 C# (1.0/1.2) szabványban foglalt szintaxist fogadja el.

Fontos

Az latest érték általában nem ajánlott. Ezzel latesta fordító lehetővé teszi a legújabb funkciókat, még akkor is, ha ezek a funkciók a konfigurált célkeretben nem szereplő frissítésektől függnek.

Megfontolások

  • Annak érdekében, hogy a projekt a cél-keretrendszerhez ajánlott alapértelmezett fordítóverziót használja, ne használja a LangVersion lehetőséget. A cél keretrendszert frissítheti az újabb nyelvi funkciók eléréséhez.

  • A LangVersion értékének default megadása eltér a LangVersion beállítás kihagyásától. A beállítás default a fordító által támogatott nyelv legújabb verzióját használja, a cél-keretrendszer figyelembe vétele nélkül. Ha például a Visual Studio 17.6-os verziójában a .NET 6-ot célozza meg, a C# 10-et használja, ha a LangVersion nincs megadva, de a C# 11-et használja, ha a LangVersion értéke default.

  • A C#-alkalmazás által hivatkozott metaadatokra nem vonatkozik a LangVersion fordítóbeállítás.

  • Mivel a C#-fordító minden verziója tartalmazza a nyelvi specifikációhoz tartozó bővítményeket, a LangVersion nem biztosítja a fordító egy korábbi verziójának megfelelő funkciókat.

  • Bár a C# verziófrissítései általában egybeesnek a fő .NET-kiadásokkal, az új szintaxis és funkciók nem feltétlenül kapcsolódnak az adott keretrendszerverzióhoz. Minden egyes funkció saját minimális .NET API-val vagy közös nyelvi futtatókörnyezeti követelményekkel rendelkezik, amelyek lehetővé teszik, hogy a NuGet-csomagokat vagy más kódtárakat is beleértve downlevel keretrendszereken fusson.

  • Függetlenül attól, hogy melyik LangVersion beállítást használja, használja a közös nyelvi futtatókörnyezet aktuális verzióját a .exe vagy .dll létrehozásához. Az egyik kivétel a barátszerelvények és a ModuleAssemblyName, amelyek a -langversion:ISO-1 alatt működnek.

A C# nyelvi verziójának megadására vonatkozó egyéb módokért tekintse meg a C#-nyelv verziószámozását.

A fordítóprogram programozott beállításáról további információt a következő témakörben talál LanguageVersion: .

C# nyelvspecifikáció

Verzió Hivatkozás Leírás
C# 8.0 és újabb verziók PDF letöltése C# Language Specification Version 7: .NET Foundation
C# 7.3 PDF letöltése Standard ECMA-334 7. kiadás
C# 6.0 PDF letöltése Standard ECMA-334 6. kiadás
C# 5.0 PDF letöltése Standard ECMA-334 5. kiadás
C# 3.0 DOC letöltése C# Language Specification Version 3.0: Microsoft Corporation
C# 2.0 PDF letöltése Standard ECMA-334 4. kiadás
C# 1.2 DOC letöltése Standard ECMA-334 2. kiadás
C# 1.0 DOC letöltése Standard ECMA-334 1st Edition

Az összes nyelvi funkció támogatásához szükséges minimális SDK-verzió

Az alábbi táblázat az SDK minimális verzióit sorolja fel a megfelelő nyelvi verziót támogató C#-fordítóval:

C# verzió Az SDK minimális verziója
C# 12 Microsoft Visual Studio/Build Tools 2022 17.8-es vagy .NET 8 SDK-s verzió
C# 11 Microsoft Visual Studio/Build Tools 2022 17.4-es vagy .NET 7 SDK-s verzió
C# 10 Microsoft Visual Studio/Build Tools 2022 vagy .NET 6 SDK
C# 9.0 Microsoft Visual Studio/Build Tools 2019 16.8-es vagy .NET 5 SDK-s verzió
C# 8.0 Microsoft Visual Studio/Build Tools 2019, 16.3 vagy .NET Core 3.0 SDK
C# 7.3 Microsoft Visual Studio/Build Tools 2017, 15.7-es verzió
C# 7.2 Microsoft Visual Studio/Build Tools 2017, 15.5-ös verzió
C# 7.1 Microsoft Visual Studio/Build Tools 2017, 15.3-os verzió
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 vagy csomagolt .NET-keretrendszer 4.5-ös fordító
C# 4 Microsoft Visual Studio/Build Tools 2010 vagy csomagolt .NET-keretrendszer 4.0 fordító
C# 3 Microsoft Visual Studio/Build Tools 2008 vagy csomagolt .NET-keretrendszer 3.5-ös fordító
C# 2 Microsoft Visual Studio/Build Tools 2005 vagy csomagolt .NET-keretrendszer 2.0 fordító
C# 1.0/1.2 Microsoft Visual Studio/Build Tools .NET 2002 vagy csomagolt .NET-keretrendszer 1.0 fordító

Nullázható

A Null értékű beállítással megadhatja a null értékű környezetet. A következő címkével <Nullable> állítható be a projekt konfigurációjában:

<Nullable>enable</Nullable>

Az argumentumnak az egyiknek enablekell lennie , disablewarningsvagy annotations. Az enable argumentum engedélyezi a null értékű környezetet. A beállítás disable letiltja a null értékű környezetet. Az argumentum megadásakor warnings a null értékű figyelmeztető környezet engedélyezve van. Az argumentum megadásakor annotations a null értékű jegyzetkörnyezet engedélyezve van. Az értékeket a null értékű környezetekről szóló cikkben ismertetjük és ismertetjük. A null értékű migrálási stratégiákról szóló cikkünkben többet is megtudhat a null értékű hivatkozástípusok engedélyezésével kapcsolatos feladatokról egy meglévő kódbázisban.

Feljegyzés

Ha nincs értékkészlet, az alapértelmezett érték disable lesz alkalmazva, de a .NET 6-sablonok alapértelmezés szerint a Nullable értékre vannak állítva enable.

A folyamatelemzéssel a végrehajtható kódban lévő változók nullabilitását lehet kikövetkeztetni. A változók kikövetkezett nullabilitása független a változó deklarált nullképességétől. A metódushívások akkor is elemezve lesznek, ha feltételesen nincsenek megadva. Például kiadási Debug.Assert módban.

A következő attribútumokkal jegyzett metódusok meghívása a folyamatelemzésre is hatással lesz:

Fontos

A globális null értékű környezet nem vonatkozik a létrehozott kódfájlokra. Ettől a beállítástól függetlenül a null értékű környezet minden létrehozottként megjelölt forrásfájl esetében le van tiltva . A fájlokat négyféleképpen lehet generáltként megjelölni:

  1. A .editorconfig fájlban adja meg generated_code = true az adott fájlra vonatkozó szakaszt.
  2. Tegyen <auto-generated> vagy <auto-generated/> írjon megjegyzést a fájl tetején. A megjegyzés bármely sorában szerepelhet, de a megjegyzésblokknak a fájl első elemének kell lennie.
  3. Indítsa el a fájlnevet TemporaryGeneratedFile_
  4. Fejezze be a fájlnevet .designer.cs, .generated.cs, .g.cs vagy .g.i.cs.

A generátorok az előfeldolgozási #nullable irányelv használatával is bejelentkezhetnek.