.NET 5의 호환성이 손상되는 변경

앱을 .NET 5로 마이그레이션하는 경우 여기에 나열된 호환성이 손상되는 변경이 영향을 줄 수 있습니다. 변경 내용은 ASP.NET Core 또는 암호화와 같은 기술 영역별로 그룹화됩니다.

이 문서에서는 각 호환성이 손상되는 변경이 이진 파일 호환인지 또는 원본 호환인지 여부를 나타냅니다.

  • 이진 파일 호환 - 기존 이진 파일은 다시 컴파일 없이 성공적으로 로드 및 실행되며 런타임 동작은 변경되지 않습니다.
  • 원본 호환 - 새 런타임을 대상으로 하거나 새 SDK 또는 구성 요소를 사용할 때 소스 코드는 변경 없이 성공적으로 컴파일됩니다.

ASP.NET Core

타이틀 이진 호환 가능 소스 호환 가능
ASP.NET Core 앱이 따옴표 붙은 숫자를 역직렬화함 ✔️
AzureAD.UI 및 AzureADB2C.UI API가 사용되지 않음 ✔️
BinaryFormatter serialization 메서드가 사용되지 않음 ✔️
엔드포인트 라우팅의 리소스가 HttpContext임 ✔️
Microsoft 접두사가 있는 Azure 통합 패키지가 제거됨 ✔️
Blazor: Blazor 앱에서 경로 우선순위 논리가 변경됨 ✔️
Blazor: 업데이트된 브라우저 지원 ✔️ ✔️
Blazor: 컴파일러에 의해 잘린 무효 공백 ✔️
Blazor: JSObjectReference 및 JSInProcessObjectReference 형식이 internal임 ✔️
Blazor: NuGet 패키지의 대상 프레임워크가 변경됨 ✔️
Blazor: ProtectedBrowserStorage 기능을 공유 프레임워크로 이동함 ✔️
Blazor: RenderTreeFrame 읽기 전용 퍼블릭 필드가 이제 속성임 ✔️
Blazor: 정적 웹 자산에 대한 유효성 검사 논리를 업데이트함 ✔️
브라우저에서 지원되지 않는 암호화 API ✔️
확장: 패키지 참조 변경 ✔️
Kestrel 및 IIS BadHttpRequestException 형식이 사용되지 않음 ✔️
IHttpClientFactory 로그 정수 상태 코드에서 생성된 HttpClient 인스턴스 ✔️
HttpSys: 클라이언트 인증서 재협상을 기본적으로 사용 안 함 ✔️
IIS: UrlRewrite 미들웨어 쿼리 문자열이 유지됨 ✔️
Kestrel: 기본적으로 검색되는 구성 변경 ✔️
Kestrel: 지원되는 기본 TLS 프로토콜 버전 변경됨 ✔️
Kestrel: 호환되지 않는 Windows 버전에서 TLS를 통한 HTTP/2 사용 안 함 ✔️ ✔️
Kestrel: 사용되지 않는 것으로 표시된 Libuv 전송 ✔️
ConsoleLoggerOptions에서 사용되지 않는 속성 ✔️
ResourceManagerWithCultureStringLocalizer 클래스 및 WithCulture 인터페이스 멤버가 제거됨 ✔️
Pubternal API가 제거됨 ✔️
요청 지역화 미들웨어에서 사용되지 않는 생성자가 제거됨 ✔️
미들웨어: 사용되지 않는 것으로 표시된 데이터베이스 오류 페이지 ✔️
예외 처리기 미들웨어가 원래 예외를 throw함 ✔️ ✔️
ObjectModelValidator가 Validate의 새 오버로드를 호출함 ✔️
쿠키 이름 인코딩이 제거됨 ✔️
IdentityModel NuGet 패키지 버전이 업데이트됨 ✔️
SignalR: MessagePack 허브 프로토콜 옵션 형식이 변경됨 ✔️
SignalR: MessagePack 허브 프로토콜이 이동됨 ✔️
UseSignalR 및 UseConnections 메서드가 제거됨 ✔️
CSV 콘텐츠 형식이 표준 규격으로 변경됨 ✔️

코드 분석

타이틀 이진 호환 가능 소스 호환 가능
CA1416 경고 ✔️
CA1417 경고 ✔️
CA1831 경고 ✔️
CA2013 경고 ✔️
CA2014 경고 ✔️
CA2015 경고 ✔️
CA2200 경고 ✔️
CA2247 경고 ✔️

핵심 .NET 라이브러리

타이틀 이진 호환 가능 소스 호환 가능
단일 파일 게시를 위한 어셈블리 관련 API 변경 ✔️
BinaryFormatter serialization 메서드가 사용되지 않음 ✔️
코드 액세스 보안 API가 사용되지 않음 ✔️
CreateCounterSetInstance가 InvalidOperationException을 throw함 ✔️
기본 ActivityIdFormat이 W3C임 ✔️
Environment.OSVersion이 올바른 버전을 반환함 ✔️
FrameworkDescription의 값이 .NET Core가 아니라 .NET임 ✔️
GAC API가 사용되지 않음 ✔️
하드웨어 내장 IsSupported 검사 ✔️
IntPtr 및 UIntPtr에서 IFormattable 구현 ✔️
LastIndexOf가 빈 검색 문자열을 처리함 ✔️
Unix에서 ASCII가 아닌 문자를 포함하는 URI 경로 ✔️
기본이 아닌 진단 ID를 사용하는 API 사용되지 않음 ✔️
ConsoleLoggerOptions에서 사용되지 않는 속성 ✔️
LINQ OrderBy.First의 복잡성 ✔️
OSPlatform 특성이 제거되었거나 특성 이름이 바뀜 ✔️
Microsoft.DotNet.PlatformAbstractions 패키지가 제거됨 ✔️
PrincipalPermissionAttribute가 사용되지 않음 ✔️
미리 보기 버전에서 매개 변수 이름 변경 ✔️
참조 어셈블리의 매개 변수 이름 변경 ✔️
원격 API가 사용되지 않음 ✔️
Activity.Tags 목록의 순서가 반대로 표시됨 ✔️
SSE 및 SSE2 비교 메서드가 NaN을 처리함 ✔️
Thread.Abort는 사용되지 않음 ✔️
Unix에서 UNC 경로의 URI 인식 ✔️
UTF-7 코드 경로가 사용되지 않음 ✔️
Vector2.Lerp 및 Vector4.Lerp의 동작 변경 ✔️
Vector<T>가 NotSupportedException을 throw함 ✔️

암호화

타이틀 이진 호환 가능 소스 호환 가능
브라우저에서 지원되지 않는 암호화 API ✔️
Cryptography.Oid가 init 전용임 ✔️
Linux의 기본 TLS 암호 그룹 ✔️
암호화 추상화에 대한 Create() 오버 로드가 사용되지 않음 ✔️
기본 FeedbackSize 값이 변경됨 ✔️

Entity Framework Core

EF Core 5.0의 호환성이 손상되는 변경

전역화

타이틀 이진 호환 가능 소스 호환 가능
Windows에서 ICU 라이브러리 사용 ✔️
StringInfo 및 TextElementEnumerator가 UAX29 규격임 ✔️
라틴어-1 문자의 유니코드 범주가 변경됨 ✔️
TextInfo.ListSeparator 값이 변경됨 ✔️

Interop

타이틀 이진 호환 가능 소스 호환 가능
WinRT에 대한 지원이 제거됨 ✔️
RCW를 InterfaceIsIInspectable로 캐스팅하면 예외가 throw됨 ✔️
비 Windows 플랫폼에서 A/W 접미사 검색 안 함 ✔️

네트워킹

타이틀 이진 호환 가능 소스 호환 가능
쿠키 경로 처리가 RFC 6265를 준수함 ✔️
SendToAsync 호출 후 LocalEndPoint가 업데이트됨 ✔️
MulticastOption.Group에서 null을 허용하지 않음 ✔️
스트림이 연속 Begin 작업을 허용함 ✔️
.NET 런타임에서 WinHttpHandler 제거됨 ✔️

SDK

타이틀 이진 호환 가능 소스 호환 가능
기본적으로 Directory.Packages.props 파일을 가져옴 ✔️
실행 파일 프로젝트에서 일치하지 않는 실행 파일을 참조할 때 발생하는 오류 ✔️
FrameworkReference가 Windows SDK에 대한 WindowsSdkPackageVersion으로 바뀌었음 ✔️
NETCOREAPP3_1 전처리기 기호가 정의되지 않음 ✔️
OutputType이 WinExe로 설정됨 ✔️
PublishDepsFilePath 동작 변경 ✔️
netcoreapp에서 net으로 TargetFramework 변경 ✔️
WinForms 및 WPF 앱이 Microsoft.NET.Sdk를 사용함 ✔️

보안

타이틀 이진 호환 가능 소스 호환 가능
코드 액세스 보안 API가 사용되지 않음 ✔️
PrincipalPermissionAttribute가 사용되지 않음 ✔️
UTF-7 코드 경로가 사용되지 않음 ✔️

직렬화

타이틀 이진 호환 가능 소스 호환 가능
BinaryFormatter.Deserialize가 예외를 다시 래핑함 ✔️
JsonSerializer.Deserialize에는 단일 문자열이 필요함 ✔️
ASP.NET Core 앱이 따옴표 붙은 숫자를 역직렬화함 ✔️
JsonSerializer.Serialize가 ArgumentNullException을 throw함 ✔️
역직렬화에 사용되지 않는 비공용 매개 변수가 없는 생성자 ✔️
키-값 쌍을 직렬화할 때 옵션이 적용됨 ✔️

Windows Forms

타이틀 이진 호환 가능 소스 호환 가능
네이티브 코드는 Windows Forms 개체에 액세스하지 못함 ✔️
OutputType이 WinExe로 설정됨 ✔️
DataGridView가 사용자 지정 글꼴을 다시 설정하지 않음 ✔️
메서드가 ArgumentException을 throw함 ✔️
메서드가 ArgumentNullException을 throw함 ✔️
속성이 ArgumentOutOfRangeException을 throw함 ✔️
TextFormatFlags.ModifyString은 사용되지 않음 ✔️
DataGridView API가 InvalidOperationException을 throw함 ✔️
WinForms 앱이 Microsoft.NET.Sdk를 사용함 ✔️
상태 표시줄 컨트롤 제거 ✔️

WPF

타이틀 이진 호환 가능 소스 호환 가능
OutputType이 WinExe로 설정됨 ✔️
WPF 앱이 Microsoft.NET.Sdk를 사용함 ✔️

참고 항목