Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
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:
- Microsoft.Extensions.Caching.Abstractions
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft. Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.Diagnostics.Abstractions
- Microsoft. Extensions.FileProviders.Abstractions
- Microsoft.Extensions.Hosting.Abstractions
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Options
- Microsoft. Extensions.Primitives
Nuevo comportamiento
A partir de .NET 11, estas nueve bibliotecas forman parte del marco compartido base de .NET:
- No necesitas una
PackageReferencepara estas bibliotecas si el destino esnet11.0o 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.
Acción recomendada
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
usingalias. - 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
- ActivatorUtilities.CreateInstance se comporta de forma coherente
- ActivatorUtilities.CreateInstance requiere un proveedor que no sea NULL
- Propiedad Key de FromKeyedServicesAttribute que admite valores NULL
- Servicio sin clave usado cuando no se encontró la clave
- GetKeyedService y GetKeyedServices con AnyKey
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- Excepciones no controladas de BackgroundService
- BackgroundService ejecuta todo ExecuteAsync como una tarea
- IHost.RunAsync e IHost.StopAsync se inician cuando se produce un error en BackgroundService
Las APIs afectadas
Ninguna.