Nullable 참조 형식 주석의 변경 내용

.NET 6에서는 .NET 라이브러리의 일부 null 허용 여부 주석이 변경되었습니다.

변경 내용 설명

이전 .NET 버전에서는 일부 nullable 참조 형식 주석이 잘못되었고 빌드 경고가 없거나 잘못되었습니다. .NET 6부터 이전에 적용된 일부 주석이 업데이트되었습니다. 새 빌드 경고가 생성되고 영향을 받는 API에 관한 잘못된 빌드 경고가 더 이상 생성되지 않습니다.

해당 변경 내용 중 일부는 새로운 빌드 시간 경고를 발생시킬 수 있기 때문에 ‘호환성이 손상되는 것’으로 간주합니다. .NET 6으로 마이그레이션하는 경우 해당 API를 참조하는 코드를 업데이트해야 합니다.

호환성이 손상되는 것으로 간주하지 않는 기타 변경 내용도 이 페이지에서 설명됩니다. 업데이트된 API를 참조하는 코드는 더 이상 필요하지 않은 연산자나 pragma를 제거하는 이점을 얻을 수 있습니다.

도입된 버전

6.0

호환성이 손상되는 변경의 형식

이 변경은 소스 호환성에 영향을 줄 수 있습니다.

변경 이유

.NET Core 3.0부터 null 허용 여부 주석이 .NET 라이브러리에 적용되었습니다. 작업 시작부터 해당 주석의 실수가 예상되었습니다. 피드백 및 추가 테스트를 통해 영향을 받는 API의 nullable 주석은 부정확한 것으로 확인되었습니다. 업데이트된 주석은 API의 null 허용 여부 계약을 올바르게 나타냅니다.

수정된 null 허용 여부 계약을 반영하도록 해당 API를 호출하는 코드를 업데이트합니다.

영향을 받는 API

다음 표에서는 영향을 받는 API를 보여 줍니다.

API 변경 내용 호환성이 손상됨 또는 호환성이 손상되지 않음
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) instance 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.ComponentModel.ISite.Container 속성 형식이 nullable임 주요 변경
System.Xml.Linq.XContainer.Add(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XContainer.AddFirst(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
XDocument(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
XDocument(XDeclaration, Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
XElement(XName, Object[]) 두 번째 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XElement.ReplaceAll(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XNode.AddAfterSelf(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XNode.ReplaceWith(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
XStreamingElement(XName, Object) 두 번째 매개 변수 형식이 nullable임 호환성이 손상되지 않음
XStreamingElement(XName, Object[]) 두 번째 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.Linq.XStreamingElement.Add(Object[]) 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Xml.XmlDocument.XmlResolver setter는 nullable 참조를 허용함 주요 변경
System.Net.Http.HttpClient.PatchAsync content 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Net.Http.HttpClient.PostAsync content 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Net.Http.HttpClient.PutAsync content 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) 첫 번째 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) 반환 형식이 nullable임 호환성이 손상되지 않음
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer 매개 변수 형식이 nullable임 주요 변경
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer 매개 변수 형식이 nullable임 주요 변경
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer 매개 변수 형식이 nullable임 주요 변경
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer 매개 변수 형식이 nullable임 주요 변경
System.Net.HttpListenerContext.AcceptWebSocketAsync subProtocol 매개 변수 형식이 nullable임 호환성이 손상되지 않음
System.Object.Equals(Object)를 재정의하는 메서드 및 bool을 반환하는 다른 많은 메서드 첫 번째 null 허용 매개 변수에 추가된 [NotNullWhen(true)] 주요 변경
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Collections.Specialized.BitVector32.Equals(Object) NotNullWhen(true)o 매개 변수에 추가됨 주요 변경
System.Collections.Specialized.BitVector32.Section.Equals(Object) NotNullWhen(true)o 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.BlobContentId.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.BlobHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.EntityHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.GuidHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.Handle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.SequencePoint.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.SignatureHeader.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Emit.Label.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.Reflection.Emit.OpCode.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경
System.DateOnly.Equals(Object) NotNullWhen(true)value 매개 변수에 추가됨 주요 변경
System.TimeOnly.Equals(Object) NotNullWhen(true)value 매개 변수에 추가됨 주요 변경
System.Reflection.Pointer.Equals(Object) NotNullWhen(true)obj 매개 변수에 추가됨 주요 변경

참고 항목