Versiones anteriores de un marco eliminadas de paquete

A partir de .NET 6, los paquetes de bibliotecas principales ya no se pueden instalar en proyectos cuya plataforma de destino sea anterior a:

  • .NET Framework 4.6.1
  • .NET Core 3.1
  • .NET Standard 2.0

Descripción del cambio

Anteriormente se podían actualizar los paquetes a la versión más reciente, incluso si se usaban desde un marco anterior a .NET Framework 4.6.1, .NET Core 3.1 o .NET Standard 2.0. A partir de .NET 6, si se hace referencia a un paquete afectado desde un marco anterior, ya no se puede actualizar el paquete al que se hace referencia a la versión más reciente.

Versión introducida

.NET 6

Motivo del cambio

El seguir compilando para todos los marcos aumenta la complejidad y el tamaño de un paquete. En el pasado, .NET resolvía este problema compilando solo para marcos actuales y recopilando binarios de marcos anteriores. Recopilar significa que, durante la compilación, se descarga la versión anterior del paquete y se extraen los binarios.

Aunque usar un binario recopilado significa que siempre se pueda actualizar sin preocuparse de que se elimine un marco, también significa que no se obtienen correcciones de errores ni nuevas características. Es decir, los recursos recopilados no reciben mantenimiento. Esto queda oculto al usuario porque puede seguir actualizando el paquete a una versión posterior aunque esté usando el mismo binario antiguo que ya no se actualiza.

A partir de .NET 6, .NET ya no realiza ninguna forma de recopilación para garantizar el mantenimiento de todos los recursos incluidos.

Si el proyecto se mantiene pero no evoluciona, simplemente no actualice los paquetes afectados. Esto no suele suponer un gran retroceso, dado que ya está usando un binario congelado.

Si el proyecto está evolucionando, actualícelo a una versión posterior del marco, como:

  • .NET Framework 4.6.1
  • .NET Core 3.1
  • .NET Standard 2.0

API afectadas

Los siguientes paquetes ya no incluyen marcos antiguos:

  • Microsoft.Extensions.DependencyModel
  • Microsoft.Win32.Registry.AccessControl
  • Microsoft.Win32.SystemEvents
  • System.Collections.Immutable
  • System.ComponentModel.Annotations
  • System.ComponentModel.Composition
  • System.ComponentModel.Composition.Registration
  • System.Composition.AttributedModel
  • System.Composition.Convention
  • System.Composition.Hosting
  • System.Composition.Runtime
  • System.Composition.TypedParts
  • System.Data.Odbc
  • System.Data.OleDb
  • System.Diagnostics.DiagnosticSource
  • System.Diagnostics.EventLog
  • System.Diagnostics.PerformanceCounter
  • System.DirectoryServices
  • System.DirectoryServices.AccountManagement
  • System.DirectoryServices.Protocols
  • System.Drawing.Common
  • System.IO.Packaging
  • System.IO.Pipelines
  • System.Management
  • System.Net.Http.WinHttpHandler
  • System.Net.WebSockets.WebSocketProtocol
  • System.Numerics.Tensors
  • System.Reflection.Context
  • System.Reflection.Metadata
  • System.Reflection.MetadataLoadContext
  • System.Runtime.Caching
  • System.Runtime.CompilerServices.Unsafe
  • System.Security.Cryptography.Cng
  • System.Security.Cryptography.OpenSsl
  • System.Security.Cryptography.Pkcs
  • System.Security.Cryptography.ProtectedData
  • System.Security.Permissions
  • System.ServiceProcess.ServiceController
  • System.Speech
  • System.Text.Encoding.CodePages
  • System.Text.Encodings.Web
  • System.Threading.AccessControl
  • System.Threading.Channels
  • System.Threading.Tasks.Dataflow
  • System.Windows.Extensions

Los siguientes paquetes ya no se van a actualizar porque su implementación ahora forma parte de la plataforma .NET 6:

  • Microsoft.Win32.Registry
  • System.ComponentModel.Annotations
  • System.IO.FileSystem.AccessControl
  • System.IO.Pipes.AccessControl
  • System.Security.AccessControl
  • System.Security.Cryptography.Cng
  • System.Security.Cryptography.OpenSsl
  • System.Security.Principal.Windows