Controllo delle versioni del linguaggio C#C# language versioning

Il compilatore C# più recente determina la versione di un linguaggio predefinito in base ai framework di destinazione del progetto.The latest C# compiler determines a default language version based on your project's target framework or frameworks. Il linguaggio C# può infatti includere funzionalità che si basano su tipi o componenti di runtime che non sono disponibili in ogni implementazione .NET.This is because the C# language may have features that rely on types or runtime components that are not available in every .NET implementation. Ciò garantisce anche che, per qualsiasi framework di destinazione del progetto, si otterrà per impostazione predefinita la versione del linguaggio maggiormente compatibile.This also ensures that for whatever target your project is built against, you get the highest compatible language version by default.

Le regole in questo articolo si applicano al compilatore fornito con Visual Studio 2019 o .NET Core 3.0 SDK.The rules in this article apply to the compiler delivered with Visual Studio 2019, or the .NET Core 3.0 SDK. I compilatori C# che fanno parte dell'installazione di Visual Studio 2017 o di versioni precedenti di .NET Core SDK usano C# 7.0 come destinazione per impostazione predefinita.The C# compilers that are part of the Visual Studio 2017 installation or earlier .NET Core SDK versions target C# 7.0 by default.

attivitàDefaults

Il compilatore determina un'impostazione predefinita in base a queste regole:The compiler determines a default based on these rules:

Framework di destinazioneTarget framework versionversion Impostazione predefinita della versione del linguaggio C#C# language version default
.NET Core.NET Core 3.x3.x C# 8.0C# 8.0
.NET Core.NET Core 2.x2.x C# 7.3C# 7.3
.NET Standard.NET Standard tuttiall C# 7.3C# 7.3
.NET Framework.NET Framework tuttiall C# 7.3C# 7.3

Impostazione predefinita per le anteprimeDefault for previews

Quando il progetto ha come destinazione un framework in anteprima con una versione del linguaggio in anteprima corrispondente, la versione del linguaggio usata è la versione del linguaggio in anteprima.When your project targets a preview framework that has a corresponding preview language version, the language version used is the preview language version. In questo modo, sarà possibile usare le funzionalità più recenti che sicuramente funzioneranno con l'anteprima in qualsiasi ambiente senza alcun effetto sui progetti che hanno come destinazione una versione rilasciata di .NET Core.This ensures that you can use the latest features that are guaranteed to work with that preview in any environment without affecting your projects that target a released .NET Core version.

Sostituire un valore predefinitoOverride a default

Se è necessario specificare in modo esplicito la versione di C#, è possibile farlo in diversi modi:If you must specify your C# version explicitly, you can do so in several ways:

Modificare il file di progettoEdit the project file

È possibile impostare la versione del linguaggio nel file di progetto.You can set the language version in your project file. Ad esempio, se si vuole accedere esplicitamente alle funzionalità di anteprima, aggiungere un elemento simile a questo:For example, if you explicitly want access to preview features, add an element like this:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

Il valore preview usa la versione del linguaggio C# in anteprima disponibile più recente supportata dal compilatore.The value preview uses the latest available preview C# language version that your compiler supports.

Configurare più progettiConfigure multiple projects

È possibile creare un file Directory.build.props che contiene l'elemento <LangVersion> per configurare più directory.You can create a Directory.Build.props file that contains the <LangVersion> element to configure multiple directories. Questa operazione viene in genere eseguita nella directory della soluzione.You typically do that in your solution directory. Aggiungere il codice seguente a un file Directory.Build.props nella directory della soluzione:Add the following to a Directory.Build.props file in your solution directory:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

Ora le build presenti in ogni sottodirectory della directory contenente il file useranno la versione di C# in anteprima.Now, builds in every subdirectory of the directory containing that file will use the preview C# version. Per altre informazioni, vedere l'articolo Personalizzare la compilazione.For more information, see the article on Customize your build.

Informazioni di riferimento sulle versioni del linguaggio C#C# language version reference

La tabella seguente illustra tutte le versioni del linguaggio C# correnti.The following table shows all current C# language versions. Il compilatore in uso potrebbe non riconoscere necessariamente ogni valore, se è antecedente.Your compiler may not necessarily understand every value if it is older. Se si installa .NET Core 3.0, si avrà accesso a tutti gli elementi elencati.If you install .NET Core 3.0, then you will have access to everything listed.

ValueValue SignificatoMeaning
previewpreview Il compilatore accetta tutte le sintassi di linguaggio valide dalla versione di anteprima più recente.The compiler accepts all valid language syntax from the latest preview version.
latestlatest Il compilatore accetta la sintassi dalla versione rilasciata più recente del compilatore (inclusa la versione secondaria).The compiler accepts syntax from the latest released version of the compiler (including minor version).
latestMajorlatestMajor Il compilatore accetta la sintassi dalla versione principale più recente rilasciata del compilatore.The compiler accepts syntax from the latest released major version of the compiler.
8.08.0 Il compilatore accetta solo la sintassi inclusa in C# 8.0 o versione precedente.The compiler accepts only syntax that is included in C# 8.0 or lower.
7.37.3 Il compilatore accetta solo la sintassi inclusa in C# 7.3 o versione precedente.The compiler accepts only syntax that is included in C# 7.3 or lower.
7.27.2 Il compilatore accetta solo la sintassi inclusa in C# 7.2 o versione precedente.The compiler accepts only syntax that is included in C# 7.2 or lower.
7.17.1 Il compilatore accetta solo la sintassi inclusa in C# 7.1 o versione precedente.The compiler accepts only syntax that is included in C# 7.1 or lower.
77 Il compilatore accetta solo la sintassi inclusa in C# 7.0 o versione precedente.The compiler accepts only syntax that is included in C# 7.0 or lower.
66 Il compilatore accetta solo la sintassi inclusa in C# 6.0 o versione precedente.The compiler accepts only syntax that is included in C# 6.0 or lower.
55 Il compilatore accetta solo la sintassi inclusa in C# 5.0 o versione precedente.The compiler accepts only syntax that is included in C# 5.0 or lower.
44 Il compilatore accetta solo la sintassi inclusa in C# 4.0 o versione precedente.The compiler accepts only syntax that is included in C# 4.0 or lower.
33 Il compilatore accetta solo la sintassi inclusa in C# 3.0 o versione precedente.The compiler accepts only syntax that is included in C# 3.0 or lower.
ISO-2ISO-2 Il compilatore accetta solo la sintassi inclusa nella specifica ISO/IEC 23270:2006 C# (2.0)The compiler accepts only syntax that is included in ISO/IEC 23270:2006 C# (2.0)
ISO-1ISO-1 Il compilatore accetta solo la sintassi inclusa nella specifica ISO/IEC 23270:2003 C# (1.0/1.2)The compiler accepts only syntax that is included in ISO/IEC 23270:2003 C# (1.0/1.2)