Partilhar via


O símbolo do pré-processador NETCOREAPP3_1 não é definido ao destinar ao .NET 5.

No .NET 5 RC2 e versões posteriores, os projetos não definem mais símbolos de pré-processador para versões anteriores, mas apenas para a versão de destino. Esse é o mesmo comportamento do .NET Core 1.0 - 3.1.

Versão introduzida

5,0 RC2

Alterar descrição

No .NET 5, desde o preview 7 até ao RC1, projetos que têm como alvo net5.0 definem ambos os símbolos de pré-processador NETCOREAPP3_1 e NET5_0. A intenção por trás dessa alteração de comportamento era que, a partir do .NET 5, os símbolos de compilação condicional seriam cumulativos.

No .NET 5 RC2 e posterior, os projetos definem apenas símbolos para os nomes de estrutura de destino (TFM) que eles visam, nem para versões anteriores.

Motivo da mudança

A alteração da prévia 7 foi revertida devido ao feedback dos clientes. A definição de símbolos para versões anteriores surpreendeu e confundiu os clientes, e alguns assumiram que era um bug no compilador C#.

Certifique-se de que sua #if lógica não assuma que NETCOREAPP3_1 está definida quando o projeto tem como alvo net5.0 ou superior. Em vez disso, suponha que NETCOREAPP3_1 só seja definido quando o projeto tenha como alvo explicitamente netcoreapp3.1.

Por exemplo, se o projeto tem como alvo múltiplas versões para .NET Core 2.1 e .NET Core 3.1 e chama APIs que foram introduzidas no .NET Core 3.1, a sua lógica #if deve ter a seguinte aparência:

#if NETCOREAPP2_1 || NETCOREAPP3_0
    // Fallback behavior for old versions.
#elif NETCOREAPP
    // Behavior for .NET Core 3.1 and later.
#endif

APIs afetadas

N/A