Versions antérieures du framework supprimées du package

À partir de .NET 6, les paquets de bibliothèques de base ne peuvent plus être installés dans des projets dont le framework cible est antérieur à :

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

Description de la modification

Auparavant, vous pouviez mettre à niveau les paquets vers la dernière version même si vous les utilisiez à partir d'un framework plus ancien que .NET Framework 4.6.1, .NET Core 3.1 ou .NET Standard 2.0. À partir de .NET 6, si vous faites référence à un paquet impacté d'une structure antérieure, vous ne pouvez plus mettre à jour le paquet référencé vers la dernière version.

Version introduite

.NET 6

Raison du changement

Poursuivre la construction pour tous les frameworks augmente la complexité et la taille d'un paquet. Auparavant, .NET résolvait ce problème en ne construisant que pour les frameworks actuels et en collectant les binaires des anciens frameworks. Le terme « récolte » signifie que, pendant la construction, la version précédente du paquet est téléchargée et les binaires sont extraits.

Si l'utilisation d'un binaire récolté signifie que vous pouvez toujours mettre à jour sans vous soucier de la perte d'un framework, cela signifie également que vous ne bénéficiez pas des correctifs ou des nouvelles fonctionnalités. En d'autres termes, les ressources récoltées ne peuvent pas être gérées. Vous ne pouvez pas le savoir, car vous pouvez continuer à mettre à jour le paquet vers une version ultérieure même si vous consommez le même ancien binaire qui n'est plus mis à jour.

À partir de .NET 6, .NET n'effectue plus aucune forme de récolte pour s'assurer que toutes les ressources expédiées peuvent être gérées.

Si votre projet est maintenu mais n'évolue pas, il suffit de ne pas mettre à niveau les paquets concernés. Cela ne constitue généralement pas une grande surcharge de travail, car vous consommez déjà un binaire gelé.

Si votre projet évolue, mettez-le à niveau avec une version plus récente du framework, par exemple :

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

API affectées

Les packages suivants ne prennent plus en charge les anciens frameworks :

  • 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

Les paquets suivants ne seront plus mis à jour, car leur implémentation fait désormais partie du framework .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