Controllo delle versioni del linguaggio C#

Il compilatore C# più recente determina la versione di un linguaggio predefinito in base ai framework di destinazione del progetto. Visual Studio non fornisce un'interfaccia utente per modificare il valore, ma è possibile modificarlo modificando il file csproj. La scelta predefinita garantisce l'uso della versione del linguaggio più recente compatibile con il framework di destinazione. È possibile accedere alle funzionalità del linguaggio più recenti compatibili con la destinazione del progetto. Questa scelta predefinita garantisce anche di non usare un linguaggio che richiede tipi o comportamenti di runtime non disponibili nel framework di destinazione. La scelta di una versione del linguaggio più recente rispetto all'impostazione predefinita può causare errori di compilazione e runtime difficili da diagnosticare.

C# 12 è supportato solo in .NET 8 e versioni più recenti. C# 11 è supportato solo in .NET 7 e versioni più recenti. C# 10 è supportato solo in .NET 6 e versioni più recenti.

Per informazioni dettagliate sulle versioni di .NET supportate dalle versioni di Visual Studio di Visual Studio, vedere la pagina relativa alla compatibilità della piattaforma Visual Studio. Per informazioni dettagliate sulle versioni di .NET supportate dalle versioni di Visual Studio per Mac, vedere la pagina relativa alla compatibilità della piattaforma Visual Studio per Mac. Controllare la pagina Mono per C# per la compatibilità di Mono con le versioni C#.

Impostazioni predefinite

Il compilatore determina un'impostazione predefinita in base a queste regole:

Destinazione Versione Impostazione predefinita della versione del linguaggio C#
.NET 8.x C# 12
.NET 7.x C# 11
.NET 6.x C# 10
.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 tutto C# 7.3

Se il progetto è destinato a un framework di preview con una versione della lingua di anteprima corrispondente, la versione della lingua usata è la versione della lingua di anteprima. È possibile usare le funzionalità più recenti con tale anteprima in qualsiasi ambiente, senza influire sui progetti destinati a una versione rilasciata di .NET Core.

Importante

Il nuovo modello di progetto per Visual Studio 2017 ha aggiunto una voce <LangVersion>latest</LangVersion> ai nuovi file di progetto. Se si aggiorna il framework di destinazione per questi progetti, l'impostazione <LangVersion> può eseguire l'override predefinito per il nuovo framework di destinazione. Assicurarsi di rimuovere il <LangVersion>latest</LangVersion> dal file di progetto per assicurarsi che il progetto usi la versione consigliata del compilatore per il framework di destinazione. È possibile aggiornare il framework di destinazione per accedere alle funzionalità del linguaggio più recenti.

Eseguire l'override del valore predefinito

Se è necessario specificare in modo esplicito la versione di C#, è possibile farlo in diversi modi:

Suggerimento

È possibile visualizzare la versione del linguaggio in Visual Studio nella pagina delle proprietà del progetto. Nella scheda compilazione, nel riquadro avanzate viene visualizzata la versione selezionata.

Per conoscere la versione del linguaggio in uso, inserire #error version (distinzione tra maiuscole e minuscole) nel codice. In questo modo il compilatore segnala un errore del compilatore, CS8304, con un messaggio contenente la versione del compilatore usata e la versione corrente del linguaggio selezionato. Per altre informazioni, vedere #error (Riferimenti per C#).

Modificare il file di progetto

È possibile impostare la versione del linguaggio nel file di progetto. Ad esempio, se si vuole accedere esplicitamente alle funzionalità di anteprima, aggiungere un elemento simile a questo:

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

Il valore preview usa la versione del linguaggio C# in anteprima disponibile più recente supportata dal compilatore.

Configurare più progetti

Per configurare più progetti, è possibile creare un file Directory.Build.props, in genere nella directory della soluzione, che contiene l'elemento <LangVersion>. Aggiungere l'impostazione seguente al file Directory.Build.props:

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

Le build presenti in ogni sottodirectory della directory contenente il file ora usano la versione di anteprima C#. Per altre informazioni, vedere Personalizzare la compilazione.

Informazioni di riferimento sulle versioni del linguaggio C#

La tabella seguente illustra tutte le versioni del linguaggio C# correnti. I compilatori meno recenti potrebbero non comprendere tutti i valori. Se si installa la versione più recente di .NET SDK, è possibile accedere a tutti gli elementi elencati.

Valore Significato
preview Il compilatore accetta tutte le sintassi di linguaggio valide dalla versione di anteprima più recente.
latest Il compilatore accetta la sintassi dalla versione rilasciata più recente del compilatore (inclusa la versione secondaria).
latestMajor
o default
Il compilatore accetta la sintassi dalla versione principale più recente rilasciata del compilatore.
12.0 Il compilatore accetta solo la sintassi inclusa in C# 12 o versione precedente.
11.0 Il compilatore accetta solo la sintassi inclusa in C# 11 o versione precedente.
10.0 Il compilatore accetta solo la sintassi inclusa in C# 10 o versione precedente.
9.0 Il compilatore accetta solo la sintassi inclusa in C# 9 o versione precedente.
8.0 Il compilatore accetta solo la sintassi inclusa in C# 8.0 o versione precedente.
7.3 Il compilatore accetta solo la sintassi inclusa in C# 7.3 o versione precedente.
7.2 Il compilatore accetta solo la sintassi inclusa in C# 7.2 o versione precedente.
7.1 Il compilatore accetta solo la sintassi inclusa in C# 7.1 o versione precedente.
7 Il compilatore accetta solo la sintassi inclusa in C# 7.0 o versione precedente.
6 Il compilatore accetta solo la sintassi inclusa in C# 6.0 o versione precedente.
5 Il compilatore accetta solo la sintassi inclusa in C# 5.0 o versione precedente.
4 Il compilatore accetta solo la sintassi inclusa in C# 4.0 o versione precedente.
3 Il compilatore accetta solo la sintassi inclusa in C# 3.0 o versione precedente.
ISO-2
o 2
Il compilatore accetta solo la sintassi inclusa nella specifica ISO/IEC 23270:2006 C# (2.0).
ISO-1
o 1
Il compilatore accetta solo la sintassi inclusa nella specifica ISO/IEC 23270:2003 C# (1.0/1.2).

Nota

Specificare LangVersion con il valore default è diverso dall'omissione dell'opzione LangVersion. Specificando default viene utilizzata la versione più recente del linguaggio supportata dal compilatore, senza tenere conto del framework di destinazione. Ad esempio, la compilazione di un progetto destinato a .NET 6 dalla versione corrente di Visual Studio 2022 usa C# 10 se LangVersion non è specificato, ma usa C# 12 se LangVersion è impostato su default.