Share via


버전별 레지스트리 키

대부분의 관리되는 어셈블리는 Windows 레지스트리에 등록되어 있어야만 COM에서 사용할 수 있습니다. 등록이 필요 없는 COM interop를 사용하는 어셈블리는 예외입니다.

어셈블리 등록 도구(Regasm.exe)를 사용하거나 RegistrationServices 클래스에 의해 노출된 메서드를 사용하여 어셈블리를 등록할 수 있습니다. 각 메커니즘에서는 같은 어셈블리의 여러 버전이 컴퓨터에서 side-by-side로 실행될 수 있게 하는 버전별 레지스트리 키가 만들어집니다.

이 항목에서는 Regasm.exe가 COM 사용 레지스트리 항목을 추가하고 제거하는 방식에 대해 설명합니다. 사용자 지정 설치 프로그램을 작성할 경우 이 항목을 통해 COM interop의 side-by-side 실행에 대한 등록 요구 사항을 이해할 수 있습니다.

버전별 키의 레지스트리 레이아웃

처음 어셈블리를 등록할 때 Regasm.exe에서는 어셈블리의 각 클래스에 대한 최상위 수준 키 집합을 만들고 HKEY CLASSES\ROOT\CLSID\{}\InprocServer32 아래에 하위 키를 추가하여 어셈블리 버전을 고유하게 식별합니다. 다음의 레지스트리 레이아웃에서는 className 버전 1.0.0.0에 대한 하위 키를 보여 줍니다.

CLSID\{}
@="namespaceName.className"
CLSID\{}\InprocServer32
@="mscoree.dll"
ThreadingModel = "Both" 
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
1.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.0.3705"
CLSID\{}\ProgId
@="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}

이후 버전의 어셈블리를 등록할 때 Regasm.exe에서는 각각의 새 버전에 대한 버전별 하위 키를 추가합니다. 앞의 레지스트리 레이아웃에서 보여 주듯이, 같은 어셈블리의 모든 버전은 최상위 수준 키를 공유합니다. 다음의 부분 레이아웃에서는 동일한 어셈블리의 하위 키 1.0.0.0 및 2.0.0.0을 보여 줍니다.

1.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.0.3705"
2.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.1.5000"

버전별 키 제거

어셈블리 버전을 제거하면 Regasm.exe에서는 버전별 하위 키만 제거합니다. 예를 들어, className 버전 1.0.0.0을 제거한 경우 Regasm.exe에서는 1.0.0.0 하위 키를 제거하지만 모든 상위 수준 키와 2.0.0.0 하위 키는 그대로 유지합니다.

CLSID\{}
   @="namespaceName.className"
CLSID\{}\InprocServer32
   @="mscoree.dll"
ThreadingModel = "Both" 
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
Version
2.0.0.0
   Class="namespaceName.className"
   Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
          RuntimeVersion="v1.1.5500"
CLSID\{}\ProgId
   @="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}

어셈블리의 마지막 버전을 제거할 때는 Regasm.exe에서 버전별 하위 키를 모두 제거하며, 어셈블리와 관련된 최상위 키들도 레지스트리에서 제거합니다.

참고 항목

개념

COM 응용 프로그램에서 런타임 초기화

Side-By-Side 실행을 위한 COM 응용 프로그램 구성

버전별 특성 적용

COM 구성 요소 및 Side-By-Side 실행

기타 리소스

COM Interop의 Side-By-Side 실행