다음을 통해 공유


.NET에서 사용할 수 없는 .NET Framework 기술

.NET Framework 라이브러리에 사용할 수 있는 몇몇 기술은 앱 도메인, 원격 및 CAS(코드 액세스 보안)와 같은 .NET 6 이상에서 사용할 수 없습니다. 라이브러리가 이 페이지에 나열된 기술 중 하나 이상을 사용하는 경우 설명된 대체 방법을 고려하세요.

API 호환성에 대한 자세한 내용은 .NET에서 호환성이 손상되는 변경 사항을 참조하세요.

애플리케이션 도메인

애플리케이션 도메인(AppDomains)은 앱을 서로 분리합니다. AppDomain에는 런타임 지원이 필요하며 리소스 비용이 많이 듭니다. 추가 앱 도메인을 만드는 것은 지원되지 않으며 향후 이 기능을 추가할 계획은 없습니다. 코드 격리의 경우 별도의 프로세스 또는 컨테이너를 대신 사용하세요. 어셈블리를 동적으로 로드하려면 AssemblyLoadContext 클래스를 사용합니다.

.NET Framework에서 코드를 쉽게 마이그레이션할 수 있도록 .NET 6 이상에서는 AppDomain API 표면의 일부를 노출합니다. API 중 일부는 정상적으로 작동하고(예: AppDomain.UnhandledException), 일부 멤버는 아무것도 수행하지 않고(예: SetCachePath), 일부는 PlatformNotSupportedException을 throw합니다(예: CreateDomain). dotnet/runtime GitHub 리포지토리System.AppDomain 참조 소스에 대해 사용하는 유형을 확인합니다. 구현된 버전과 일치하는 분기를 선택해야 합니다.

원격 통신

.NET 원격은 .NET 6 이상에서 지원되지 않습니다. .NET 원격은 문제가 있는 아키텍처로 식별되었습니다. 더 이상 지원되지 않는 애플리케이션 도메인 간의 통신에 사용됩니다. 또한 원격에는 유지 관리 비용이 많이 드는 런타임 지원이 필요합니다.

프로세스 간 간단한 통신을 위해 System.IO.Pipes 클래스 또는 MemoryMappedFile 클래스 같은 IPC(Inter-process communication) 메커니즘을 원격 대신 사용할 수 있습니다. 더 복잡한 시나리오의 경우 오픈 소스 StreamJsonRpc 프로젝트는 기존 스트림 또는 파이프 연결을 기반으로 작동하는 플랫폼 간 .NET Standard 원격 프레임워크를 제공합니다.

여러 컴퓨터에서 네트워크 기반 솔루션을 대신 사용하세요. HTTP와 같이 오버헤드가 낮은 일반 텍스트 프로토콜을 사용하는 것이 좋습니다. ASP.NET Core에서 사용하는 웹 서버인 Kestrel 웹 서버도 옵션이 될 수 있습니다. 또한 네트워크 기반, 컴퓨터 간 시나리오에서 System.Net.Sockets의 사용을 고려하세요. 앞에서 설명한 StreamJsonRpc는 웹 소켓을 통한 JSON 또는 이진(MessagePack을 통해) 통신에 사용할 수 있습니다.

추가 메시징 옵션은 .NET 오픈 소스 개발자 프로젝트: 메시징을 참조하세요.

원격은 지원되지 않으므로 대리자 개체에서 BeginInvoke()EndInvoke()를 호출하면 PlatformNotSupportedException이 throw됩니다. 자세한 내용은 .NET Core에 대한 대리자 BeginInvoke 호출 마이그레이션을 참조하세요.

CAS(코드 액세스 보안)

관리형 애플리케이션 또는 라이브러리에서 사용하거나 실행하는 리소스를 제한하기 위해 런타임 또는 프레임워크에 의존하는 샌드박싱은 .NET Framework에서 지원되지 않으므로 .NET 6 이상에서도 지원되지 않습니다. .NET Framework 및 권한 상승이 발생하는 런타임에 대한 너무 많은 사례가 있기 때문에 CAS는 더 이상 보안 경계로 처리되지 않습니다. 또한 CAS는 구현을 더욱 복잡하게 만들고 이를 사용하지 않으려는 애플리케이션의 정확성-성능에 영향을 주는 경우가 많습니다.

최소한의 권한으로 프로세스를 실행하기 위해 가상화, 컨테이너 또는 사용자 계정과 같은 운영 체제에서 제공되는 보안 경계를 사용할 수 있습니다.

보안 투명도

CAS와 마찬가지로 보안 투명도는 샌드박스 코드를 보안상 중요한 코드와 선언적인 방식으로 분리할 수 있지만 더 이상 보안 경계로서 지원되지는 않습니다. 이 기능은 Silverlight에서 많이 사용됩니다.

최소한의 권한 집합으로 프로세스를 실행하려면 가상화, 컨테이너 또는 사용자 계정과 같은 운영 체제에서 제공하는 보안 경계를 사용합니다.

System.EnterpriseServices

System.EnterpriseServices(COM+)는 .NET 6 이상에서 지원되지 않습니다.

Workflow Foundation

.NET 6 이상에서는 Windows WF(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 이상에서는 지원되지 않습니다.

참고 항목