Compartir a través de


Cambios importantes en .NET Core 2.1

Si va a migrar a la versión 2.1 de .NET Core, los cambios importantes enumerados en este artículo podrían afectar a la aplicación.

Bibliotecas de .NET principales

Las APIs de ruta no lanzan una excepción para caracteres no válidos

Las API que implican rutas de archivo ya no validan los caracteres de ruta ni arrojan un ArgumentException si se encuentra un carácter no válido.

Descripción del cambio

En .NET Framework y .NET Core 1.0 y 2.0, los métodos enumerados en la sección API afectadas inician una excepción ArgumentException si el argumento de ruta de acceso contiene un carácter de ruta que no es válido. A partir de .NET Core 2.1, estos métodos ya no comprueban si hay caracteres de ruta de acceso no válidos o producen una excepción si se encuentra un carácter no válido.

Motivo del cambio

La validación agresiva de caracteres de ruta de acceso bloquea algunos escenarios multiplataforma. Este cambio se introdujo para que .NET no intente replicar ni predecir el resultado de las llamadas API del sistema operativo. Para obtener más información, consulte la entrada de blog System.IO en .NET Core 2.1: un adelanto.

Versión introducida

.NET Core 2.1

Si el código dependía de estas API para comprobar si hay caracteres no válidos, puede agregar una llamada a Path.GetInvalidPathChars.

Las APIs afectadas

Consulte también


Campos privados agregados a tipos de estructura predefinidos

Los campos privados se agregaron a determinados tipos de estructura en ensamblados de referencia. Como resultado, en C#, siempre se deben crear instancias de esos structs mediante el operador new o un literal predeterminado.

Descripción del cambio

En .NET Core 2.0 y versiones anteriores, algunos tipos de estructura proporcionados, por ejemplo, ConsoleKeyInfo, podrían instanciarse sin usar el operador new ni el literal predeterminado en C#. Esto se debe a que los ensamblados de referencia usados por el compilador de C# no contenían los campos privados de las estructuras. Todos los campos privados para los tipos de estructura de .NET se agregan a los ensamblados de referencia a partir de .NET Core 2.1.

Por ejemplo, el código de C# siguiente se compila en .NET Core 2.0, pero no en .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

if (key.ToString() == "y")
{
    Console.WriteLine("Yes!");
}

En .NET Core 2.1, el código anterior da como resultado el siguiente error del compilador: CS0165: uso de la variable local "key" sin asignar.

Versión introducida

2.1

Instancie tipos de estructura usando el operador new o el literal predeterminado.

Por ejemplo:

ConsoleKeyInfo key = new ConsoleKeyInfo();    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo key = default;    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");

Categoría

Bibliotecas de .NET principales

Las APIs afectadas


Versiones de OpenSSL en macOS

Los entornos de ejecución de .NET Core 3.0 y versiones posteriores en macOS ahora prefieren versiones de OpenSSL 1.1.x a versiones de OpenSSL 1.0.x para los tipos AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl y SafeEvpPKeyHandle.

El entorno de ejecución de .NET Core 2.1 ahora admite versiones de OpenSSL 1.1.x, pero todavía prefiere versiones de OpenSSL 1.0.x.

Descripción del cambio

Anteriormente, el entorno de ejecución de .NET Core usaba versiones de OpenSSL 1.0.x en macOS para tipos que interactúan con OpenSSL. La versión más reciente de OpenSSL 1.0.x, OpenSSL 1.0.2, ya no es compatible. Para mantener los tipos que usan OpenSSL en versiones compatibles de OpenSSL, los entornos de ejecución de .NET Core 3.0 y versiones posteriores ahora usan versiones más recientes de OpenSSL en macOS.

Con este cambio, el comportamiento de los entornos de ejecución de .NET Core en macOS es el siguiente:

  • Los entornos de ejecución de .NET Core 3.0 y versiones posteriores usan OpenSSL 1.1.x, si está disponible y recurren a OpenSSL 1.0.x solo si no hay ninguna versión 1.1.x disponible.

    En el caso de los autores de llamada que usen los tipos de interoperabilidad de OpenSSL con P/Invoke personalizados, siga las instrucciones de los comentarios sobre SafeEvpPKeyHandle.OpenSslVersion. La aplicación se puede bloquear si no se comprueba el valor de OpenSslVersion.

  • El entorno de ejecución de .NET Core 2.1 usa OpenSSL 1.0.x, si está disponible, y vuelve a OpenSSL 1.1.x si no hay ninguna versión 1.0.x disponible.

    El entorno de ejecución 2.1 prefiere la versión anterior de OpenSSL porque la SafeEvpPKeyHandle.OpenSslVersion propiedad no existe en .NET Core 2.1, por lo que la versión de OpenSSL no se puede determinar de forma confiable en tiempo de ejecución.

Versión introducida

  • .NET Core 2.1.16
  • .NET Core 3.0.3
  • .NET Core 3.1.2

Categoría

Bibliotecas de .NET principales

Las APIs afectadas


MSBuild

Las herramientas de proyecto ahora se incluyen en el SDK

El SDK de .NET Core 2.1 ahora incluye herramientas comunes de la CLI y ya no es necesario hacer referencia a estas herramientas desde el proyecto.

Descripción del cambio

En .NET Core 2.0, los proyectos hacen referencia a herramientas .NET externas mediante la configuración del proyecto <DotNetCliToolReference>. En .NET Core 2.1, algunas de estas herramientas se incluyen con el SDK de .NET Core y la configuración ya no es necesaria. Si incluye referencias a estas herramientas en el proyecto, recibirá un error similar al siguiente: La herramienta "Microsoft.EntityFrameworkCore.Tools.DotNet" ahora se incluye en el SDK de .NET Core.

Las herramientas ahora se incluyen en el SDK de .NET Core 2.1:

Valor <DotNetCliToolReference> Herramienta
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Versión introducida

SDK de .NET Core 2.1.300

Quite la <DotNetCliToolReference> configuración de tu proyecto.

Categoría

MSBuild

Las APIs afectadas

No disponible


Consulte también