サイド バイ サイド アセンブリの状態ストレージの作成
独自のサイド バイ サイド アセンブリを作成する場合は、「 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