Compartilhar via


Alterações em anotações de tipo de referência anuláveis

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.

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

Consulte também