.NET에서 사용할 수 없는 .NET Framework 기술
.NET Framework 라이브러리에 사용할 수 있는 여러 기술은 앱 도메인, 원격 및 CAS(코드 액세스 보안)와 같은 .NET 6 이상에서 사용할 수 없습니다. 라이브러리가 이 페이지에 나열된 기술 중 하나 이상을 사용하는 경우 언급된 대체 방법을 고려합니다.
API 호환성에 대한 자세한 내용은 .NET의 중대한 변경 사항 을 참조하세요.
애플리케이션 도메인
애플리케이션 도메인(AppDomains)은 앱을 서로 격리합니다. AppDomains는 런타임 지원이 필요하며 리소스 비용이 많이 듭니다. 더 많은 앱 도메인 만들기는 지원되지 않으며 나중에 이 기능을 추가할 계획이 없습니다. 코드 격리의 경우 별도의 프로세스 또는 컨테이너를 대안으로 사용합니다. 어셈블리를 동적으로 로드하려면 AssemblyLoadContext 클래스를 사용합니다.
.NET Framework에서 코드를 보다 쉽게 마이그레이션할 수 있도록 .NET 6 이상에서는 일부 AppDomain API 화면을 노출합니다. 일부 API는 정상적으로 기능하며(예: AppDomain.UnhandledException), 일부 멤버는 아무 작업도 수행하지 않으며(예: SetCachePath), 일부는 PlatformNotSupportedException 예외를 발생시킵니다(예: CreateDomain).
dotnet/runtime GitHub 리포지토리에서 사용하는 형식을 System.AppDomain
참조 원본와 비교하여 검토해야 합니다. 구현된 버전과 일치하는 분기를 선택해야 합니다.
원격(Remoting)
.NET 원격은 .NET 6 이상에서 지원되지 않습니다. .NET 리모팅은 문제가 있는 아키텍처로 식별되었습니다. 더 이상 지원되지 않는 애플리케이션 도메인 간에 통신하는 데 사용됩니다. 또한 원격에는 유지 관리 비용이 많이 드는 런타임 지원이 필요합니다.
프로세스 간 간단한 통신을 위해 IPC(프로세스 간 통신) 메커니즘을 원격에 대한 대안(예: System.IO.Pipes 클래스 또는 MemoryMappedFile 클래스)으로 고려합니다. 보다 복잡한 시나리오의 경우, 오픈 소스 StreamJsonRpc 프로젝트는 기존의 스트림이나 파이프 연결 위에서 동작하는 플랫폼 간 .NET Standard 리모팅 프레임워크를 제공합니다.
컴퓨터에서 네트워크 기반 솔루션을 대안으로 사용합니다. HTTP와 같은 오버헤드가 낮은 일반 텍스트 프로토콜을 사용하는 것이 좋습니다. ASP.NET Core에서 사용하는 웹 서버인 Kestrel 웹 서버여기에 옵션입니다. 또한 네트워크 기반 컴퓨터 간 시나리오에 System.Net.Sockets 사용하는 것이 좋습니다. 앞에서 언급한 StreamJsonRpc는 웹 소켓을 통해 JSON 또는 바이너리(MessagePack 사용) 통신에 사용할 수 있습니다.
더 많은 메시징 옵션은 .NET 오픈 소스 개발자 프로젝트: 메시징 참조하세요.
원격이 지원되지 않으므로 대리자 개체에서 BeginInvoke()
및 EndInvoke()
을 호출하면 PlatformNotSupportedException
가 발생합니다. 자세한 내용은 .NET Core 대한Migrating Delegate BeginInvoke 호출을 참조하세요.
CAS(코드 액세스 보안)
런타임 또는 프레임워크를 사용하여 관리되는 애플리케이션 또는 라이브러리가 사용하거나 실행하는 리소스를 제한하는 샌드박싱은 .NET Framework 지원되지 않으므로 .NET 6 이상에서도 지원되지 않습니다. .NET Framework 및 권한 상승이 발생하는 런타임에 너무 많은 사례가 있기 때문에 CAS는 더 이상 보안 경계로 처리되지 않습니다. 또한 CAS는 구현을 더 복잡하게 만들고 이를 사용하지 않으려는 애플리케이션에 대한 정확성-성능에 영향을 주는 경우가 많습니다.
최소 권한 집합으로 프로세스를 실행하려면 가상화, 컨테이너 또는 사용자 계정과 같은 운영 체제에서 제공하는 보안 경계를 사용합니다.
보안 투명성
CAS와 마찬가지로 보안 투명성은 샌드박스 코드를 보안에 중요한 코드와 선언적 방식으로 분리하지만 더 이상 보안 경계 지원되지. 이 기능은 Silverlight에서 많이 사용됩니다.
최소 권한 집합으로 프로세스를 실행하려면 가상화, 컨테이너 또는 사용자 계정과 같은 운영 체제에서 제공하는 보안 경계를 사용합니다.
System.EnterpriseServices
System.EnterpriseServices(COM+)는 .NET 6 이상에서 지원되지 않습니다.
Workflow Foundation
.NET 6 이상에서는 WF(Windows Workflow Foundation)가 지원되지 않습니다. 대안은 CoreWF 참조하세요.
팁
WCF(Windows Communication Foundation) 서버는 CoreWCF NuGet 패키지를 사용하여 .NET 6 이상에서 사용할 수 있습니다. 자세한 내용은 CoreWCF 1.0이 릴리스 참조하세요.
일부 리플렉션 내보내기 API는 지원되지 않습니다.
.NET 8 및 이전 버전의 .NET(Core)은 System.Reflection.Emit API에서 생성된 어셈블리 저장을 지원하지 않으며 AssemblyBuilder.Save 메서드를 사용할 수 없습니다. 또한 AssemblyBuilderAccess 열거형의 다음 필드는 사용할 수 없습니다.
.NET 9에서는 PersistedAssemblyBuilder
구현되었고 AssemblyBuilder.Save 메서드가 리플렉션 내보내기 라이브러리에 다시 추가되었습니다. 이 API를 사용하는 방법에 대한 자세한 내용은 System.Reflection.Emit.PersistedAssemblyBuilder 클래스참조하세요.
.NET의 다양한 AssemblyBuilder 구현에 대한 자세한 내용은 System.Reflection.Emit.AssemblyBuilder 클래스참조하세요.
다중 모듈 어셈블리 로드하기
여러 모듈(MSBuild의OutputType=Module
)으로 구성된 어셈블리는 .NET 6 이상에서 지원되지 않습니다.
또는 개별 모듈을 단일 어셈블리 파일로 병합하는 것이 좋습니다.
XSLT 스크립트 블록
XSLT 스크립트 블록 .NET Framework에서만 지원됩니다. .NET 6 이상에서는 지원되지 않습니다.
또한 참고
- .NET Framework에서 .NET 포팅 개요
.NET