호스팅 개요

.NET Framework 응용 프로그램은 자신이 빌드될 때 대상으로 사용된 공용 언어 런타임을 자동으로 호스팅합니다. 관리 코드를 .exe 어셈블리로 컴파일하면 .exe가 실행될 때 mscoree.dll에 의해 런타임이 자동으로 시작됩니다. 또한 관리되지 않는 응용 프로그램도 공용 언어 런타임 호스팅의 장점을 활용할 수 있습니다. 런타임에서는 IIS(인터넷 정보 서비스) 및 Microsoft SQL Server 2005와 같은 응용 프로그램을 확장하기 위한 프레임워크를 제공합니다.

관리되는 .exe 어셈블리와 마찬가지로 자동으로 호출되는지 아니면 관리되지 않는 호스팅 API를 사용하여 로드되는지에 관계없이 .NET Framework 응용 프로그램에는 런타임 호스트라는 코드가 필요합니다. 런타임 호스트는 런타임을 프로세스에 로드하고, 프로세스 내에 응용 프로그램 도메인을 만든 다음 해당 응용 프로그램 도메인 안에서 사용자 코드를 로드하고 실행합니다.

.NET Framework 버전 2.0은 CLR을 호스팅하는 응용 프로그램이 다양한 런타임 기능을 제어할 수 있도록 합니다. 메모리 할당 및 어셈블리 로드와 같은 일부 기능을 사용자 지정 구현으로 대체할 수 있으며 다른 기능의 동작을 제어하고 런타임에 이벤트 알림을 받고 응용 프로그램 도메인을 관리할 수 있습니다.

.NET Framework 4에서는 많은 버전 2.0 호스팅 API를 통합합니다. 또한 .NET Framework 4에서는 In-Process Side-By-Side 런타임 호스트 활성화를 지원하고 기타 향상된 기능을 제공합니다.

이 개요는 다음과 같은 단원으로 구성됩니다.

  • 호스팅되는 런타임의 초기화 및 시작

  • .NET Framework 버전 2.0 호스팅 관리 인터페이스

  • .NET Framework 버전 4 호스팅 관리 인터페이스

  • 응용 프로그램 도메인 관리자

  • 관련 항목

  • 참조

호스팅되는 런타임의 초기화 및 시작

.NET Framework 4 호스팅 API는 ICLRMetaHost 인터페이스를 반환할 수 있는 CLRCreateInstance 함수를 제공합니다. 그러면 이 인터페이스의 GetRuntime 메서드를 호출하여 특정 CLR 버전이 지정된 특정 ICLRRuntimeInfo 인터페이스를 가져올 수 있습니다. 이 절차는 .NET Framework 2.0 호스팅 API에서 사용하는 CorBindToRuntimeEx 메서드를 대체합니다.

.NET Framework 버전 2.0 호스팅 API는 런타임을 초기화하는 CorBindToRuntimeEx 함수를 제공합니다. 로드할 런타임 버전을 직접 선택할 수 있지만 한 프로세스에서 한 버전만 호스팅할 수 있습니다. 버전 2.0, 3.0 또는 3.5가 로드되면 이 함수는 런타임을 시작하고 관리 코드를 실행하는 데 사용되는 ICLRRuntimeHost 인터페이스를 반환합니다.

.NET Framework 버전 1 호스팅 API는 ICorRuntimeHost 인터페이스를 제공합니다.

런타임 시작에 대한 자세한 내용은 프로세스에 공용 언어 런타임 로드를 참조하고 관리 코드 실행에 대한 자세한 내용은 관리 호스팅 코드로의 전환을 참조하십시오.

맨 위로 이동

.NET Framework 2.0 호스팅 관리 인터페이스

.NET Framework 2.0의 CLR에서는 호스팅된 런타임의 다양한 기능을 제어하는 호스팅 관리 인터페이스를 제공하고 호스트 응용 프로그램이 런타임에서 제공하는 다른 관리 인터페이스를 구현할 수 있게 하여 사용자 고유의 호스팅 관리 인터페이스를 구현할 수 있도록 합니다.

쉽게 찾을 수 있도록 관리 인터페이스는 다음 두 가지의 큰 범주로 나뉩니다.

  • 호스트가 구현하고 런타임이 IHostControl 인터페이스를 통해 검색하는 관리 인터페이스

  • CLR이 제공하고 호스트가 ICLRControl 인터페이스를 통해 검색하는 관리 인터페이스

다음 표에서는 이러한 인터페이스를 기능별로 분류하여 보여 줍니다. 각 그룹 내의 가장 중요한 인터페이스가 가장 먼저 표시됩니다.

Group

Function

인터페이스

어셈블리 로드 관리

로드할 어셈블리가 있는 위치, 버전 관리 방법 및 로드할 어셈블리의 형식을 호스트가 사용자 지정할 수 있도록 합니다. 예를 들어, 하드 디스크의 파일 대신 데이터베이스에서 어셈블리를 로드할 수 있습니다.

CLR은 IHostControl 인터페이스를 사용하여 호스트가 이 인터페이스 그룹을 구현하는지 여부를 확인합니다.

IHostAssemblyManager

IHostAssemblyStore

ICLRAssemblyReferenceList

ICLRAssemblyIdentityManager

정책 관리

호스트가 다양한 안정성 요구 사항에 적합하게 프로그램 오류 처리 방법을 지정할 수 있도록 합니다.

호스트는 ICLRControl 인터페이스를 사용하여 런타임 관리자에 액세스할 수 있으며 런타임에서 발생한 오류를 알리기 위한 IHostPolicyManager 콜백을 구현합니다.

ICLRPolicyManager

IHostPolicyManager

호스트 보호 관리

지정한 형식 또는 멤버를 사용하지 못하도록 하여 호스트가 해당 프로그래밍 모델을 적용할 수 있도록 합니다. 예를 들어, 호스트가 스레딩 또는 동기화 기본 형식을 사용하지 못하게 할 수 있습니다.

호스트는 ICLRControl 인터페이스를 사용하여 런타임 관리자에 액세스합니다.

ICLRHostProtectionManager

메모리 관리

CLR이 메모리를 할당하는 데 사용하는 운영 체제 함수의 대체 함수를 제공하여 호스트가 메모리 할당을 제어할 수 있도록 합니다.

CLR은 IHostControl 인터페이스를 사용하여 호스트가 이 인터페이스 그룹을 구현하는지 여부를 확인합니다.

IHostMemoryManager

IHostMAlloc

ICLRMemoryNotificationCallback

가비지 수집 관리

가비지 수집 시작 및 종료에 대한 알림을 받기 위한 메서드를 호스트가 구현할 수 있도록 합니다. 호스트는 가비지 수집 관리 기능을 사용하여 수집을 시작하고, 통계를 수집하고, 수집의 몇 가지 특성을 지정할 수 있습니다.

호스트는 ICLRControl 인터페이스를 사용하여 런타임 관리자에 액세스합니다. CLR은 IHostControl 인터페이스를 사용하여 호스트가 이 인터페이스 그룹을 구현하는지 여부를 확인합니다.

IHostGCManager

ICLRGCManager

디버그 관리

호스트가 디버거의 연결 여부를 확인하고, 추가 디버깅 정보를 제공하고, 디버깅 작업을 사용자 지정할 수 있도록 합니다.

호스트는 ICLRControl 인터페이스를 사용하여 런타임 관리자에 액세스합니다.

ICLRDebugManager

CLR 이벤트 관리

호스트가 EClrEvent에 열거된 이벤트에 대한 알림을 등록할 수 있도록 합니다.

호스트는 ICLRControl 인터페이스를 사용하여 런타임 관리자에 액세스하고 IActionOnCLREvent 인터페이스를 사용하여 해당 이벤트 처리기를 구현합니다.

ICLROnEventManager

IActionOnCLREvent

작업 관리

스레드가 관리 코드와 비관리 코드 간에 전환될 때마다 호스트가 알림을 받을 수 있도록 합니다. 또한 호스트가 스레드 선호도, 작업 시작/중지 시기 및 작업 예약 방식을 제어할 수 있도록 합니다.

CLR은 IHostControl 인터페이스를 사용하여 호스트가 이 인터페이스 그룹을 구현하는지 여부를 확인합니다.

IHostTaskManager

ICLRTaskManager

IHostTask

ICLRTask

스레드 풀 관리

호스트가 런타임에 사용될 자체 스레드 풀을 구현할 수 있도록 합니다.

CLR은 IHostControl 인터페이스를 사용하여 호스트가 이 인터페이스 그룹을 구현하는지 여부를 확인합니다.

IHostThreadPoolManager

동기화 관리

호스트가 런타임에 사용될 자체 동기화 기본 형식을 구현할 수 있도록 합니다. 호스트는 이벤트, 임계 영역 및 세마포를 제공할 수 있습니다.

CLR은 IHostControl 인터페이스를 사용하여 호스트가 이 인터페이스 그룹을 구현하는지 여부를 확인합니다.

IHostSyncManager

ICLRSyncManager

IHostCrst

IHostManualEvent

IHostAutoEvent

IHostSemaphore

I/O 완료 관리

호스트가 비동기 입/출력을 직접 구현할 수 있도록 합니다.

CLR은 IHostControl 인터페이스를 사용하여 호스트가 이 인터페이스 그룹을 구현하는지 여부를 확인합니다.

IHostIoCompletionManager

참고

이전 버전 런타임의 호스팅 인터페이스는 사용되지 않는 CLR 호스팅 인터페이스 및 Coclass를 참조하십시오.

맨 위로 이동

.NET Framework 4 호스팅 관리 인터페이스

.NET Framework 4에서는 다음과 같은 인터페이스 내에 있는 2.0 호스팅 API를 통합합니다.

  • ICLRMetaHost는 특정 버전의 CLR을 반환하고, 설치된 모든 CLR을 나열하고, 모든 in-process 런타임을 나열하고, 활성화 인터페이스를 반환하고, 어셈블리를 컴파일하는 데 사용되는 CLR 버전을 검색하는 메서드를 제공합니다.

  • ICLRMetaHostPolicy는 정책 기준, 관리되는 어셈블리, 버전 및 구성 파일을 기반으로 CLR 인터페이스를 제공하는 GetRequestedRuntime 메서드를 제공합니다.

  • ICLRRuntimeInfo는 버전, 디렉터리, 로드 상태 등 특정 런타임에 대한 정보를 반환하는 메서드를 제공합니다.

  • ICLRStrongName은 MSCorEE.dll(StrongNameErrorInfo 제외)이 단일 인터페이스로 내보내는 모든 CLR 버전 2.0 강력한 이름 지정 전역 정적 함수를 그룹화합니다. 모든 ICLRStrongName 메서드는 표준 COM HRESULT를 반환합니다.

이러한 인터페이스에서는 .NET Framework 2.0 호스팅 인터페이스를 캡슐화하고 대체합니다.

맨 위로 이동

응용 프로그램 도메인 관리자

공용 언어 런타임을 호스팅하는 프로그램의 경우 응용 프로그램 도메인에 의해 어셈블리가 서로 격리되므로 안정성이 더 높아집니다. 응용 프로그램 도메인을 언로드하면 프로세스에서 어셈블리를 언로드할 수 있습니다.

여러 응용 프로그램 도메인을 관리하기 위해 .NET Framework에서는 AppDomainManager 클래스를 기본 클래스로 제공합니다. 이 클래스에서 고유한 응용 프로그램 도메인 관리자를 파생시킬 수 있습니다. 호스트 응용 프로그램을 위해 디자인하는 응용 프로그램 도메인 관리자는 기본적으로 관리 코드로 된 호스트 확장입니다. 이 관리자는 프로세스에서 생성되는 각 응용 프로그램 도메인에 자동으로 로드됩니다.

응용 프로그램 도메인 관리자는 관리 코드와 비관리 코드 간의 전환을 일부 제거하여 성능을 향상시킬 수 있으며, 새 응용 프로그램 도메인이 만들어질 때 알림을 받아 사용자가 응용 프로그램 도메인을 구성할 수 있게 할 수 있습니다. 또한 응용 프로그램 도메인 관리자는 관리되지 않는 호스트에서 관리 코드를 호출할 수 있는 방법도 제공합니다.

맨 위로 이동

관련 항목

제목

설명

프로세스에 공용 언어 런타임 로드

프로세스에 런타임을 로드하고, 이 런타임을 초기화하고, 이 런타임의 동작을 지정하는 값을 설정하는 방법에 대해 설명합니다.

도메인 언로딩 및 프로세스 종료

응용 프로그램 도메인을 언로드하고 프로세스를 종료하는 방법에 대해 설명합니다.

역할 기반 보안 정책 및 보안 주체 설정

역할 기반 보안 정책을 설정하는 방법에 대해 설명합니다.

응용 프로그램 도메인 수준 보안 정책 설정

응용 프로그램 도메인 수준의 보안 정책을 설정하는 방법에 대해 설명합니다.

사용자 코드 로딩 및 실행

사용자 코드를 로드하고 실행하는 방법에 대해 설명합니다.

응용 프로그램 도메인 만들기 및 구성

사용자 코드를 실행할 응용 프로그램을 만들고 구성하는 방법에 대해 설명합니다.

응용 프로그램 도메인 경계 확인

새 응용 프로그램 도메인의 경계를 지정하는 방법에 대해 설명합니다.

관리 호스팅 코드로의 전환

관리 호스팅 코드와 사용자 코드를 실행할 수 있도록 비관리 코드에서 관리 코드로 전환하는 방법에 대해 설명합니다.

활성화 구성 파일

응용 프로그램이 구성 파일에 지정되어 있지 않은 런타임 버전을 활성화하는 방법에 대해 설명합니다.

런타임 호스트

.NET Framework와 함께 제공되는 호스트를 설명합니다.

응용 프로그램 도메인

프로세스에서 실행하는 코드를 격리시키기 위해 코드에서 사용하는 구문에 대해 설명합니다.

.NET Framework의 Side-by-Side 실행

여러 버전의 응용 프로그램, 구성 요소 또는 런타임을 실행하는 방법에 대해 설명합니다.

.NET Framework 4 및 4.5에 추가된 CLR 호스팅 인터페이스

.NET Framework 버전 4에서 런타임을 호스팅하기 위한 관리되지 않는 인터페이스를 설명합니다.

CLR 호스팅 인터페이스

.NET Framework 버전 2.0에서 런타임을 호스팅하기 위한 관리되지 않는 인터페이스에 대해 설명합니다.

맨 위로 이동

참조

System.AppDomainManager

맨 위로 이동