Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En .NET 5 RC2 y versiones posteriores, los proyectos ya no definen símbolos de preprocesador para versiones anteriores, sino solo para la versión que tienen como destino. Este es el mismo comportamiento que .NET Core 1.0 - 3.1.
Versión introducida
5.0 RC2
Descripción del cambio
En la versión preliminar 7 de .NET 5 hasta RC1, los proyectos que tienen como destino net5.0
definen ambos símbolos de preprocesador NETCOREAPP3_1
y NET5_0
. La intención detrás de este cambio de comportamiento era que a partir de .NET 5, los símbolos de compilación condicional serían acumulativos.
En .NET 5 RC2 y versiones posteriores, los proyectos solo definen símbolos para los monikers de la plataforma de destino (TFM) que tiene como destino y no para ninguna versión anterior.
Motivo del cambio
El cambio de la versión preliminar 7 fue revertido debido a los comentarios de los clientes. La definición de símbolos para versiones anteriores sorprendió y confundió a los clientes, y algunos presuponen que era un error en el compilador de C#.
Acción recomendada
Asegúrese de que su lógica #if
no asuma que NETCOREAPP3_1
está definido cuando el proyecto tiene como objetivo net5.0
o superior. En su lugar, suponga que NETCOREAPP3_1
solo se define cuando el proyecto apunta a netcoreapp3.1
explícitamente.
Por ejemplo, si su proyecto tiene establecidos varios destinos para .NET Core 2.1 y .NET Core 3.1, y usted llama a las API que se han introducido en .NET Core 3.1, la lógica de #if
debe ser la siguiente:
#if NETCOREAPP2_1 || NETCOREAPP3_0
// Fallback behavior for old versions.
#elif NETCOREAPP
// Behavior for .NET Core 3.1 and later.
#endif
Las APIs afectadas
No disponible