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. Visual Studio non fornisce un'interfaccia utente per modificare il valore, ma è possibile modificarlo modificando il file csproj .Visual Studio doesn't provide a UI to change the value, but you can change it by editing the csproj file. La scelta del valore predefinito consente di usare la versione più recente del linguaggio compatibile con il Framework di destinazione.The choice of default ensures that you use the latest language version compatible with your target framework. È possibile trarre vantaggio dall'accesso alle funzionalità più recenti del linguaggio compatibili con la destinazione del progetto.You benefit from access to the latest language features compatible with your project's target. Questa scelta predefinita garantisce anche di non usare un linguaggio che richiede tipi o comportamenti di runtime non disponibili nel Framework di destinazione.This default choice also ensures you don't use a language that requires types or runtime behavior not available in your target framework. La scelta di una versione della lingua più recente di quella predefinita può causare difficoltà nella diagnosi degli errori di runtime e della fase di compilazione.Choosing a language version newer than the default can cause hard to diagnose compile-time and runtime errors.

Le regole in questo articolo si applicano al compilatore fornito con Visual Studio 2019 o .NET SDK.The rules in this article apply to the compiler delivered with Visual Studio 2019 or the .NET 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.

C# 8,0 è supportato solo in .NET Core 3. x e versioni successive.C# 8.0 is supported only on .NET Core 3.x and newer versions. Molte delle funzionalità più recenti richiedono la libreria e le funzionalità di runtime introdotte in .NET Core 3. x:Many of the newest features require library and runtime features introduced in .NET Core 3.x:

C# 9,0 è supportato solo in .NET 5 e versioni più recenti.C# 9.0 is supported only on .NET 5 and newer versions.

Valori predefinitiDefaults

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.NET 5. x5.x C# 9.0C# 9.0
.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 2.12.1 C# 8.0C# 8.0
.NET Standard.NET Standard 2.02.0 C# 7.3C# 7.3
.NET Standard.NET Standard 1.x1.x C# 7.3C# 7.3
.NET Framework.NET Framework allall C# 7.3C# 7.3

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. Si usano le funzionalità più recenti con questa anteprima in qualsiasi ambiente, senza influire sui progetti destinati a una versione di .NET Core rilasciata.You use the latest features with that preview in any environment, without affecting projects that target a released .NET Core version.

Importante

Visual Studio 2017 ha aggiunto una <LangVersion>latest</LangVersion> voce a tutti i file di progetto creati.Visual Studio 2017 added a <LangVersion>latest</LangVersion> entry to any project files it created. Ciò significava C# 7,0 quando è stato aggiunto.That meant C# 7.0 when it was added. Tuttavia, una volta eseguito l'aggiornamento a Visual Studio 2019, significa la versione rilasciata più recente, indipendentemente dal framework di destinazione.However, once you upgrade to Visual Studio 2019, that means the latest released version, regardless of the target framework. Questi progetti ora sostituiscono il comportamento predefinito.These projects now override the default behavior. È necessario modificare il file di progetto e rimuovere il nodo.You should edit the project file and remove that node. Il progetto utilizzerà quindi la versione del compilatore consigliata per il Framework di destinazione.Then, your project will use the compiler version recommended for your target framework.

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:

Suggerimento

Per conoscere la versione del linguaggio attualmente in uso, inserire (maiuscole/minuscole #error version ) nel codice.To know what language version you're currently using, put #error version (case sensitive) in your code. In questo modo, il compilatore segnala un errore del compilatore, CS8304, con un messaggio contenente la versione del compilatore usata e la versione corrente della lingua selezionata.This makes the compiler report a compiler error, CS8304, with a message containing the compiler version being used and the current selected language version. Per ulteriori informazioni, vedere #error (riferimenti per C#) .See #error (C# Reference) for more information.

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

Per configurare più progetti, è possibile creare un file Directory. Build. props che contiene l' <LangVersion> elemento.To configure multiple projects, you can create a Directory.Build.props file that contains the <LangVersion> element. 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>

Compilazioni in tutte le sottodirectory della directory che contiene il file utilizzerà la versione di anteprima C#.Builds in all subdirectories of the directory containing that file will use the preview C# version. Per altre informazioni, vedere personalizzare la compilazione.For more information, see 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 potrebbe non comprendere necessariamente ogni valore se è meno recente.Your compiler may not necessarily understand every value if it's older. Se si installa la versione più recente di .NET SDK, sarà possibile accedere a tutti gli elementi elencati.If you install the latest .NET SDK, then you have access to everything listed.

ValoreValue SignificatoMeaning
preview 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.
latest 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).
latestMajor (default)latestMajor (default) 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.
9.0 Il compilatore accetta solo la sintassi inclusa in C# 9,0 o versioni precedenti.The compiler accepts only syntax that is included in C# 9.0 or lower.
8.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.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.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.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.
7 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.
6 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.
5 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.
4 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.
3 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-2 (o 2)ISO-2 (or 2) Il compilatore accetta solo la sintassi inclusa in ISO/IEC 23270:2006 C# (2,0).The compiler accepts only syntax that is included in ISO/IEC 23270:2006 C# (2.0).
ISO-1 (o 1)ISO-1 (or 1) Il compilatore accetta solo la sintassi inclusa in 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).

Suggerimento

Aprire una Shell della riga di comandoper gli sviluppatori ed eseguire il comando seguente per visualizzare l'elenco delle versioni della lingua disponibili nel computer.Open a developer command-line shell, and run the following command to see the listing of language versions available on your machine.

csc -langversion:?

Se si esegue una query sull'opzione di compilazione -langversion, viene stampato un valore simile al seguente:Querying the -langversion compile option like this prints something similar to the following:

Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0
9.0 (default)
latestmajor
preview
latest