Algunos paquetes de Microsoft.Extensions incluidos en el entorno compartido

Para reducir el tamaño de la aplicación, simplificar las dependencias del paquete y simplificar el mantenimiento, .NET 11 incluye nueve bibliotecas de Microsoft.Extensions.* en el marco compartido base. Los proyectos que hacen referencia explícita a estos paquetes reciben la advertencia de compilación NU1510. Puede solucionar la advertencia eliminando el PackageReference. Si depende de una versión anterior de estos paquetes, actualizar a la versión de .NET 11 podría exponer cambios importantes introducidos entre versiones anteriores y .NET 11.

Versión introducida

.NET 11 preview 4

Comportamiento anterior

Anteriormente, las siguientes bibliotecas de Microsoft.Extensions.* no formaban parte del marco compartido de .NET. (Puede obtener el framework compartido mediante Sdk="Microsoft.NET.Sdk", o haciendo referencia igualmente a cualquiera de los otros SDK de .NET.) Los proyectos que las necesitaban requerían entradas explícitas PackageReference, y el proceso de compilación copiaba los ensamblados en la carpeta de salida:

Nuevo comportamiento

A partir de .NET 11, estas nueve bibliotecas forman parte del marco compartido base de .NET:

  • No necesitas una PackageReference para estas bibliotecas si el destino es net11.0 o una versión posterior.
  • Si hace referencia a estos paquetes explícitamente, recibirá la advertencia de compilación NU1510.
  • Estos ensamblados ya no se copian en la carpeta de salida.
  • En raras ocasiones, las API adicionales del conjunto de carga predeterminado pueden provocar conflictos de nombres o tipos. Para resolver un conflicto, agregue directivas más explícitas using , use un alias o use un nombre de tipo completo.

Tipo de cambio disruptivo

Este es un cambio de comportamiento.

Motivo del cambio

La inclusión de estas bibliotecas usadas habitualmente en el marco compartido reduce el tamaño de la aplicación, simplifica las dependencias del paquete y simplifica el mantenimiento.

Quite PackageReference de cualquier paquete afectado:

Para los proyectos dirigidos solo a net11.0 o versiones posteriores, elimine PackageReference por completo:

<!-- Remove entries like these from your .csproj when targeting net11.0 only: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." />
<PackageReference Include="Microsoft.Extensions.Options" Version="..." />

El código sigue funcionando sin modificaciones; las API ahora forman parte del entorno de ejecución.

En el caso de los proyectos de varios destinos (por ejemplo, <TargetFrameworks>net10.0;net11.0</TargetFrameworks>), no se genera NU1510 porque el paquete sigue siendo necesario para el TFM anterior. No se requiere ninguna acción: NuGet selecciona automáticamente el ensamblado adecuado para cada marco de destino. Si desea ser explícito, puede incluir condicionalmente la referencia:

<!-- Keep the reference only for TFMs that don't include it in the shared framework: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." Condition="'$(TargetFramework)' != 'net11.0'" />

Resolución de conflictos de nombres en tiempo de compilación (poco frecuente):

Si se produce un error de compilación porque un nombre del código entra en conflicto con una de las API recién incluidas, use uno de estos enfoques:

  • Agregue una directiva más específica using .
  • Use un using alias.
  • Use un nombre de tipo completo.

Si depende de una versión anterior de estos paquetes:

Para evitar errores en tiempo de ejecución como MissingMethodException o TypeLoadException, vuelva a compilar las bibliotecas o archivos binarios dependientes en los ensamblados de referencia de .NET 11. Si su destino es net11.0, quite PackageReference y vuelva a compilar. Si usa TFM anteriores o varios destinos, actualice las referencias de paquete de los destinos no net11.0 a la versión actual y, a continuación, vuelva a compilar.

Los siguientes cambios importantes de las versiones anteriores podrían aparecer al actualizar a las versiones de .NET 11 de estos paquetes:

Microsoft. Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

Las APIs afectadas

Ninguna.