Share via


Símbolo de pré-processador NETCOREAPP3_1 não é definido ao direcionar o .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 que eles se destinam. Esse é o mesmo comportamento do .NET Core 1.0 – 3.1.

Versão introduzida

5.0 RC2

Descrição das alterações

No .NET 5 versão prévia de 7 a RC1, projetos direcionados a net5.0 definem 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 posteriores, os projetos definem apenas símbolos para os monikers de estrutura de destino (TFM) aos quais ele se destinam e não para versões anteriores.

Motivo da alteração

A alteração da versão prévia 7 foi revertida devido aos comentários dos clientes. Definir símbolos para versões anteriores surpreendeu e confundiu os clientes, e alguns pensaram que era um bug no compilador do C#.

Verifique se sua lógica #if não pressupõe que NETCOREAPP3_1 esteja definido quando o projeto for direcionado a net5.0 ou superior. Em vez disso, suponha que NETCOREAPP3_1 só seja definido quando o projeto for explicitamente direcionado a netcoreapp3.1.

Por exemplo, se seu projeto se direciona para .NET Core 2.1 e .NET Core 3.1 e você chamar APIs que foram introduzidas no .NET Core 3.1, sua lógica #if deverá ser a seguinte:

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

APIs afetadas

N/D