Leer en inglés

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, es posible que los cambios importantes de este artículo afecten a la aplicación.

Bibliotecas de Core .NET

Las API de ruta de acceso no inician ninguna excepción para caracteres no válidos

Las API que implican rutas de acceso de archivo ya no validan los caracteres de ruta de acceso ni inician ninguna excepción 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 ni inician 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 intentara replicar ni predecir el resultado de las llamadas API del sistema operativo. Para obtener más información, vea la entrada de blog Vista rápida de System.IO en .NET Core 2.1.

Versión introducida

.NET Core 2.1

Si su código se basaba en estas API para comprobar si había caracteres no válidos, puede agregar una llamada a Path.GetInvalidPathChars.

API afectadas

Consulte también


Campos privados agregados a tipos struct integrados

Se han agregado campos privados a algunos tipos de struct 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, se podría crear una instancia de algunos tipos de struct proporcionados, por ejemplo, ConsoleKeyInfo, sin usar el operador new ni un literal predeterminado en C#. Esto se debe a que los ensamblados de referencia que usa el compilador de C# no contenían los campos privados de los structs. Todos los campos privados de los tipos de struct .NET se agregan a los ensamblados de referencia a partir de .NET Core 2.1.

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

C#
ConsoleKeyInfo key;    // Struct type

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

En .NET Core 2.1, el código anterior genera el siguiente error del compilador: CS0165 - Uso de la variable local no asignada "key"

Versión introducida

2.1

Acción recomendada

Cree instancias de tipos de struct mediante el operador new o el literal predeterminado.

Por ejemplo:

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

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

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

Categoría

Bibliotecas de Core .NET

API afectadas


Versiones de OpenSSL en macOS

Ahora, los runtime de .NET Core 3.0 y versiones posteriores en macOS prefieren las versiones de OpenSSL 1.1.x a las versiones de OpenSSL 1.0.x en los tipos AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl y SafeEvpPKeyHandle.

Ahora, el runtime de .NET Core 2.1 es compatible con las versiones de OpenSSL 1.1.x, pero siguen siendo preferibles las versiones de OpenSSL 1.0.x.

Descripción del cambio

Antes, el runtime de .NET Core usaba versiones de OpenSSL 1.0.x en macOS para en los tipos que interactúan con OpenSSL. La versión más reciente de OpenSSL 1.0.x, OpenSSL 1.0.2, ya no se admite. Para mantener los tipos que usan OpenSSL en versiones compatibles de OpenSSL, los runtime de .NET Core 3.0 y versiones posteriores usan ahora las versiones más recientes de OpenSSL en macOS.

Con este cambio, el comportamiento de los runtime de .NET Core en macOS es el siguiente:

  • Los runtime de .NET Core 3.0 y versiones posteriores usan OpenSSL 1.1.x (si está disponible) y revierten a OpenSSL 1.0.x solo si no hay disponible ninguna versión 1.1.x.

    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.

  • Los runtime de .NET Core 2.1 usan OpenSSL 1.0.x (si está disponible) y revierten a OpenSSL 1.1.x si no hay disponible ninguna versión 1.0.x.

    El runtime 2.1 prefiere la versión anterior de OpenSSL porque la propiedad SafeEvpPKeyHandle.OpenSslVersion 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

Acción recomendada

Categoría

Bibliotecas de Core .NET

API afectadas


MSBuild

Herramientas de proyecto ahora incluidas 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 de .NET externas con la opción de configuración <DotNetCliToolReference> del proyecto. En .NET Core 2.1, algunas de estas herramientas se incluyen en el SDK de .NET Core y esa configuración ya no es necesaria. Si incluye referencias a estas herramientas en el proyecto, recibirá un error parecido al siguiente: La herramienta "Microsoft.EntityFrameworkCore.Tools.DotNet" se incluye ahora en el SDK de .NET Core.

Herramientas ahora incluidas 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

Acción recomendada

Quite la configuración <DotNetCliToolReference> del proyecto.

Categoría

MSBuild

API afectadas

N/D


Consulte también