サイド バイ サイド アセンブリの DLL の作成
独自のサイド バイ サイド アセンブリを作成する場合は、次のガイドラインに従って、ガイドラインに従って、 サイド バイ サイド アセンブリを作成し、アセンブリで使用されるすべての DLL を作成します。
DLL は、複数のバージョンが互いに干渉することなく、同時に同じプロセスで実行できるように設計する必要があります。 たとえば、多くのアプリケーションでは、それぞれが 1 つのコンポーネントの異なるバージョンを必要とする複数のプラグインをホストしています。 サイド バイ サイド アセンブリの開発者は、同じプロセスで同時に実行するときに、コンポーネントの複数のバージョンが正しく動作することを確認するように設計およびテストする必要があります。
Windows XP より前のシステムでコンポーネントを共有コンポーネントとして提供する場合は、これらのシステムに単一インスタンスの共有コンポーネントとして引き続きコンポーネントをインストールする必要があります。 この場合、コンポーネントに下位互換性があることを確認する必要があります。
システム上で複数のバージョンのアセンブリが実行されている場合に、オブジェクトの使用を評価します。 異なるバージョンのアセンブリで、メモリ マップド ファイル、名前付きパイプ、登録済みの Windows メッセージとクラス、共有メモリ、セマフォ、ミューテックス、ハードウェア ドライバーなどの個別のデータ構造が必要かどうかを判断します。 アセンブリ バージョン間で使用されるすべてのデータ構造は、下位互換性が必要です。 バージョン間で使用できるデータ構造と、バージョンに対してプライベートにする必要があるデータ構造を決定します。 共有データ構造にセマフォやミューテックスなどの個別の同期オブジェクトが必要かどうかを判断します。
ウィンドウ クラスや Atoms などの一部のオブジェクトは、プロセスごとに一意に名前が付けられます。 ウィンドウ クラスなどのオブジェクトは、マニフェストを使用してアセンブリごとにバージョン管理する必要があります。 Atoms などのオブジェクトの場合は、バージョン間で共有する予定がない限り、バージョン固有の識別子を使用します。 バージョン固有の識別子を使用する場合は、4 部構成のバージョン番号を使用します。
任意の DLL に自己登録コードを含めないことを示します。 サイド バイ サイド アセンブリ内の DLL を自己登録することはできません。
#define ステートメントを使用して、DLL 内のすべてのバージョン固有の名前を定義します。 これにより、すべてのレジストリ キーを 1 つの場所から変更できます。 アセンブリの新しいバージョンをリリースする場合は、この #define ステートメントを変更するだけで済みます。 例えば:
#define MyRegistryKey "MyAssembly1.0.0.0"
非永続データを Temp ディレクトリに格納します。
ユーザー データをグローバルな場所に配置しないでください。 アプリケーション データをユーザー データとは別に保持します。
すべての共有ファイルに、アプリケーションの名前に依存するファイル バージョンを割り当てます。
プロセス間で使用されるすべてのメッセージとデータ構造をバージョンに割り当てて、意図しないプロセス間の共有を防ぎます。
DLL は、異なるバージョンのアセンブリ間で共有されない共有メモリ セクションなど、存在しない可能性があるバージョン間での共有に依存しないようにする必要があります。
元の DLL のバイナリ インターフェイス互換性コントラクトに従わない新しい機能を追加する場合は、新しい CLSID、ProgId、およびファイル名を割り当てる必要があります。 この CLSID、ProgId、およびファイル名を使用するには、サイド バイ サイド アセンブリの将来のバージョンが必要になります。 これにより、サイド バイ サイドではない DLL のバージョンがサイド バイ サイド バージョンに登録されている場合の競合が回避されます。
同じ CLSID または ProgId を再利用する場合は、アセンブリに下位互換性があることを確認してください。
アセンブリ コードでアセンブリの既定の設定を初期化して設定します。 レジストリに既定の設定を保存しないでください。
すべてのデータ構造にバージョンを割り当てます。
サイドバイサイド アセンブリの状態は、サイドバイサイド アセンブリの状態ストレージ維持に関する指針に従って、DLL に格納する必要があります。