Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No .NET 6, algumas anotações de nulidade nas bibliotecas do .NET foram alteradas.
Descrição da alteração
Nas versões anteriores do .NET, algumas anotações de tipos de referência anuláveis estão incorretas, e os avisos de compilação estão ausentes ou incorretos. A partir do .NET 6, algumas anotações que foram aplicadas anteriormente foram atualizadas. Novos avisos de build serão produzidos e avisos de build incorretos não serão mais produzidos para as APIs afetadas.
Algumas dessas alterações são consideradas interruptivas porque podem levar a novos avisos em tempo de build. Quando você migrar para o .NET 6, o código que faz referência a essas APIs precisará ser atualizado.
Outras alterações que não são consideradas interruptivas também estão documentadas nesta página. Qualquer código que faça referência às APIs atualizadas pode se beneficiar da remoção de operadores ou pragmas que não são mais necessários.
Versão introduzida
6,0
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade da origem.
Motivo da alteração
Do .NET Core 3.0 em diante, as anotações de nulidade são aplicadas às bibliotecas .NET. Desde o início do esforço, erros nessas anotações foram antecipados. Por meio de comentários e testes adicionais, as anotações anuláveis das APIs afetadas foram determinadas como imprecisas. As anotações atualizadas representam corretamente os contratos de nulidade para as APIs.
Ação recomendada
Atualize o código que chama essas APIs para refletir os contratos de nulidade revisados.
APIs afetadas
A tabela a seguir lista as APIs afetadas:
API (Interface de Programação de Aplicativos) | O que mudou | Interruptiva ou não interruptiva |
---|---|---|
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) | instance o tipo de parâmetro é anulável |
Não interruptiva |
System.ComponentModel.ISite.Container | O tipo de propriedade é anulável | Quebra |
System.Xml.Linq.XContainer.Add(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XContainer.AddFirst(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
XDocument(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
XDocument(XDeclaration, Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
XElement(XName, Object[]) | O segundo tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XElement.ReplaceAll(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XNode.AddAfterSelf(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XNode.ReplaceWith(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
XStreamingElement(XName, Object) | O segundo tipo de parâmetro é anulável | Não interruptiva |
XStreamingElement(XName, Object[]) | O segundo tipo de parâmetro é anulável | Não interruptiva |
System.Xml.Linq.XStreamingElement.Add(Object[]) | O tipo de parâmetro é anulável | Não interruptiva |
System.Xml.XmlDocument.XmlResolver | O setter aceita uma referência anulável | Quebra |
System.Net.Http.HttpClient.PatchAsync | content o tipo de parâmetro é anulável |
Não interruptiva |
System.Net.Http.HttpClient.PostAsync | content o tipo de parâmetro é anulável |
Não interruptiva |
System.Net.Http.HttpClient.PutAsync | content o tipo de parâmetro é anulável |
Não interruptiva |
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) | O primeiro tipo de parâmetro é anulável | Não interruptiva |
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) | O tipo de retorno não é anulável | Não interruptiva |
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) | buffer o tipo de parâmetro é anulável |
Quebra |
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) | buffer o tipo de parâmetro é anulável |
Quebra |
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) | buffer o tipo de parâmetro é anulável |
Quebra |
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) | buffer o tipo de parâmetro é anulável |
Quebra |
System.Net.HttpListenerContext.AcceptWebSocketAsync | subProtocol o tipo de parâmetro é anulável |
Não interruptiva |
Métodos que substituem System.Object.Equals(Object) e muitos outros que retornam bool |
[NotNullWhen(true)] adicionado ao primeiro parâmetro anulável |
Quebra |
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Collections.Specialized.BitVector32.Equals(Object) | NotNullWhen(true) foi adicionado ao o parâmetro |
Quebra |
System.Collections.Specialized.BitVector32.Section.Equals(Object) | NotNullWhen(true) foi adicionado ao o parâmetro |
Quebra |
System.Reflection.Metadata.BlobContentId.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.BlobHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.EntityHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.GuidHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.Handle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.SequencePoint.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.SignatureHeader.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Emit.Label.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.Reflection.Emit.OpCode.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |
System.DateOnly.Equals(Object) | NotNullWhen(true) foi adicionado ao value parâmetro |
Quebra |
System.TimeOnly.Equals(Object) | NotNullWhen(true) foi adicionado ao value parâmetro |
Quebra |
System.Reflection.Pointer.Equals(Object) | NotNullWhen(true) foi adicionado ao obj parâmetro |
Quebra |