Controle de versão da linguagem C#

O compilador do C# mais recente determina uma versão da linguagem padrão com base nas estruturas de destino do projeto. O Visual Studio não fornece uma interface do usuário para alterar o valor, mas você pode alterá-lo editando o arquivo csproj. A escolha do padrão garante que você use a versão de idioma mais recente compatível com sua estrutura de destino. Você se beneficia do acesso aos recursos de linguagem mais recentes compatíveis com o destino do projeto. Essa opção padrão também garante que você não use uma linguagem que exija tipos ou comportamento de runtime não disponível em sua estrutura de destino. Escolher uma versão de idioma mais recente do que o padrão pode causar erros de tempo de compilação e de runtime difíceis de diagnosticar.

O C# 11 tem suporte apenas no .NET 7 e em versões mais recentes. O C# 10 tem suporte apenas no .NET 6 e em versões mais recentes. O C# 9 tem suporte apenas no .NET 5 e em versões mais recentes.

Verifique a página de compatibilidade da plataforma do Visual Studio para obter detalhes sobre quais versões do .NET têm suporte por versões do Visual Studio. Verifique a página de compatibilidade da plataforma do Visual Studio para Mac para obter detalhes sobre quais versões do .NET têm suporte por versões do Visual Studio para Mac. Verifique a página do Mono para o C# a respeito da compatibilidade do Mono com versões C#.

Padrões

O compilador determina um padrão com base nestas regras:

Estrutura de destino version Padrão da versão da linguagem C#
.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 all C# 7.3

Quando seu projeto se destina a uma estrutura de visualização que tem uma versão da linguagem correspondente da visualização, a versão de linguagem usada é a de visualização. Você usa os recursos mais recentes com essa versão prévia em qualquer ambiente, sem afetar projetos destinados a uma versão lançada do .NET Core.

Importante

O novo modelo de projeto do Visual Studio 2017 adicionou uma entrada <LangVersion>latest</LangVersion> a novos arquivos de projeto. Se você atualizar a estrutura de destino para esses projetos, eles substituirão o comportamento padrão. Você deve remover o <LangVersion>latest</LangVersion> do seu arquivo de projeto ao atualizar o SDK do .NET. Em seguida, seu projeto usará a versão do compilador recomendada para sua estrutura de destino. Você pode atualizar a estrutura de destino para acessar recursos de linguagem mais recentes.

Substituir um padrão

Se precisar especificar sua versão do C# explicitamente, poderá fazer isso de várias maneiras:

Dica

Você pode ver a versão do idioma no Visual Studio na página de propriedades do projeto. Na guia Compilar, o painel Avançado exibe a versão selecionada.

Para saber qual versão da linguagem você está usando no momento, coloque #error version (diferencia maiúsculas de minúsculas) em seu código. Isso torna o relatório do compilador um erro do compilador, CS8304, com uma mensagem contendo a versão do compilador em uso e a versão atual da linguagem selecionada. Confira #erro (Referência C#) para obter mais informações.

Editar o arquivo de projeto

É possível definir a versão da linguagem em seu arquivo de projeto. Por exemplo, se você quiser explicitamente acesso às versões prévias dos recursos, adicione um elemento como este:

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

O valor preview usa a versão prévia mais recente da linguagem C# compatível com seu compilador.

Configurar vários projetos

Crie um arquivo Directory.Build.props que contém o elemento <LangVersion> para configurar vários projetos. Normalmente, você faz isso no diretório da solução. Adicione o seguinte a um arquivo Directory.Build.props no diretório de solução:

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

Agora, os builds de todos os subdiretórios do diretório que contém esse arquivo usarão a versão prévia do C#. Para obter mais informações, confira Personalizar seu build.

Referência à versão da linguagem C#

A tabela a seguir mostra todas as versões atuais da linguagem C#. Seu compilador talvez não entenda necessariamente todo valor se for mais antigo. Se você instalar o SDK mais recente do .NET, terá acesso a tudo o que for listado.

Valor Significado
preview O compilador aceita todas as sintaxes de linguagem válidas da versão prévia mais recente.
latest O compilador aceita a sintaxe da versão lançada mais recente do compilador (incluindo a versão secundária).
latestMajor
ou default
O compilador aceita a sintaxe da versão principal mais recente lançada do compilador.
11.0 O compilador aceita apenas a sintaxe incluída no C# 11 ou inferior.
10.0 O compilador aceita somente a sintaxe incluída no C# 10 ou inferior.
9.0 O compilador aceita somente a sintaxe incluída no C# 9 ou inferior.
8.0 O compilador aceita somente a sintaxe incluída no C# 8.0 ou inferior.
7.3 O compilador aceita somente a sintaxe incluída no C# 7.3 ou inferior.
7.2 O compilador aceita somente a sintaxe incluída no C# 7.2 ou inferior.
7.1 O compilador aceita somente a sintaxe incluída no C# 7.1 ou inferior.
7 O compilador aceita somente a sintaxe incluída no C# 7.0 ou inferior.
6 O compilador aceita somente a sintaxe incluída no C# 6.0 ou inferior.
5 O compilador aceita somente a sintaxe incluída no C# 5.0 ou inferior.
4 O compilador aceita somente a sintaxe incluída no C# 4.0 ou inferior.
3 O compilador aceita somente a sintaxe incluída no C# 3.0 ou inferior.
ISO-2
ou 2
O compilador aceita somente a sintaxe incluída no ISO/IEC 23270:2006 C# (2.0).
ISO-1
ou 1
O compilador aceita somente a sintaxe incluída no ISO/IEC 23270:2003 C# (1.0/1.2).