Side-by-side 어셈블리에 대한 상태 스토리지 작성

사용자 고유의 병렬 어셈블리를 만들 때 병렬 어셈블리 만들기 지침을 따르고 병렬 어셈블리에 대한DLL 작성의 지침에 따라 어셈블리에 포함할 DLL을 작성합니다.

상태 스토리지에 대한 다음 지침을 준수합니다.

  • 앞으로 및 이전 버전과 호환되도록 상태 스토리지를 디자인합니다. v1, v3, v2 등 모든 순서로 버전이 사용될 것으로 예상합니다.

  • 어셈블리 코드에서 어셈블리의 기본 설정을 초기화하고 설정합니다. 레지스트리에 기본 설정을 저장하지 마세요.

  • 동시에 실행할 수 있는 여러 어셈블리 버전을 격리하려면 레지스트리 설정을 개별 버전별로 작성해야 합니다. 병렬 공유 시나리오 중에 어셈블리의 상태를 올바르게 저장하고 처리하도록 병렬 어셈블리를 디자인합니다.

  • 어셈블리는 일반적으로 레지스트리 키에 상태 정보를 저장합니다. 어셈블리 상태를 포함하는 레지스트리 키를 쉽게 버전 지정하는 방법을 제공하기 위해 헤더 파일 및 도우미 함수 집합을 작성합니다.

  • 레지스트리에 저장된 모든 어셈블리 상태 정보는 다른 버전의 어셈블리에서 격리되어야 합니다. 레지스트리에 저장된 상태 설정은 레지스트리의 개별 버전 섹션에 저장해야 합니다. 이는 레지스트리의 HKLM 및 HKCU 부분에 모두 필요합니다. 예를 들어 어셈블리 버전 XXXX에 대한 HKCU 상태 설정을 다음 레지스트리 키 아래에 저장합니다.

    Hkcu\MyCompany\MyComponent\VersionXXXX

  • 공유 어셈블리에 의해 레지스트리에 저장된 모든 상태 정보는 레지스트리의 개별 버전 섹션에 저장되어야 합니다. 예를 들어 EnableSuperCoolFeature라는 상태 설정의 값은 TRUE 또는 FALSE일 수 있습니다. 다음과 같이 공유 병렬 어셈블리에 대한 값을 저장합니다.

    \ HKEY_CurrentUser 소프트웨어\MyCompany\MyComponent\버전01.01\EnableSuperCoolFeature = TRUE

  • 프라이빗 어셈블리에 의해 레지스트리에 저장된 모든 상태 정보는 레지스트리의 개별 애플리케이션 섹션에 저장되어야 합니다. 이렇게 하면 어셈블리의 상태 설정이 애플리케이션으로 격리됩니다. GetModuleFileName 함수를 사용하여 가상 루트를 설정할 수 있습니다. 예를 들어 어셈블리 버전 XXYY가 "SomeApplication"의 프라이빗 어셈블리인 경우 GetModuleFileName 에 대한 호출은 "SomeApplication"을 반환하고 어셈블리에 대한 모든 프라이빗 상태 설정을 다음 키로 작성해야 합니다.

    Hkcu\MyCompany\MyComponent\VersionXXYY\SomeApplication

  • 레지스트리에 저장된 공유 상태 설정을 실행되는 어셈블리 컨텍스트에 비공개로 설정합니다. GetModuleFileName 함수를 사용하여 가상 루트를 설정할 수 있습니다. HKLM 및 HKCU 분기에 대해 이 작업을 수행해야 합니다.

  • 이상적으로는 애플리케이션이 상태를 유지하며 레지스트리를 변경하지 않는 지속성 모델을 채택해야 합니다. 애플리케이션은 구성 요소의 레지스트리 항목을 직접 터치할 필요가 없습니다. 대신 어셈블리는 나란히 호환되는 설정을 저장하거나 복원하는 API 함수를 제공해야 합니다.

  • 어셈블리는 어셈블리가 전역 상태와 상호 작용할 수 있도록 레지스트리 외부의 저장소에 상태 설정을 저장할 수 있습니다. 병렬 어셈블리는 다음과 같은 병렬 호환 저장소를 사용할 수 있습니다.

    • 보호된 저장소(pstore)
    • WinInet 캐시
    • Microsoft SQL Server