Compartilhar via


Versões mais antigas da estrutura removidas do pacote

A partir do .NET 6, os pacotes de bibliotecas principais não podem mais ser instalados em projetos cuja estrutura de destino seja mais antiga do que:

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

Descrição das alterações

Anteriormente, você era capaz de atualizar os pacotes para a versão mais recente, mesmo se os estivesse usando de uma estrutura mais antiga que .NET Framework 4.6.1, .NET Core 3.1 ou .NET Standard 2.0. A partir do .NET 6, se você estiver fazendo referência a um pacote afetado de uma estrutura anterior, não poderá mais atualizar o pacote referenciado para a versão mais recente.

Versão introduzida

.NET 6

Motivo da alteração

Continuar a compilar para todas as estruturas aumenta a complexidade e o tamanho de um pacote. No passado, o .NET resolveu esse problema compilando apenas para estruturas atuais e coletando binários para estruturas mais antigas. Coletar significa que, durante a compilação, a versão anterior do pacote é baixada e os binários são extraídos.

Embora consumir um binário coletado signifique que você sempre pode atualizar sem se preocupar que uma estrutura seja descartada, isso também significa que você não obtém nenhuma correção de bug ou novos recursos. Em outras palavras, os ativos coletados não possuem manutenção. Isso fica oculto porque você pode continuar atualizando o pacote para uma versão posterior, mesmo que esteja consumindo o mesmo binário antigo que não é mais atualizado.

A partir do .NET 6, o .NET não executa mais nenhuma forma de coleta para garantir que todos os ativos enviados possam receber manutenção.

Se o projeto for mantido, mas não estiver evoluindo, simplesmente não atualize os pacotes afetados. Isso geralmente não é um grande retrocesso porque você já está consumindo um binário congelado.

Se o projeto estiver evoluindo, atualize-o para uma versão mais atual da estrutura, como:

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

APIs afetadas

Os seguintes pacotes não enviam mais estruturas antigas:

  • 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
  • {1>System.Composition.Convention<1}
  • {1>System.Composition.Hosting<1}
  • 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
  • {1>{2>System.Reflection.Context<2}<1}
  • 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

Os seguintes pacotes não serão mais atualizados porque sua implementação agora faz parte da 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