サイド バイ サイド アセンブリの DLL の作成

独自のサイド バイ サイド アセンブリを作成する場合は、次のガイドラインに従って、 サイド バイ サイド アセンブリの作成 に関するガイドラインに従い、アセンブリで使用される DLL を作成します。

  • DLL は、複数のバージョンが互いに干渉することなく、同時に同じプロセスで実行できるように設計する必要があります。 たとえば、多くのアプリケーションでは、1 つのコンポーネントの異なるバージョンが必要な複数のプラグインをホストしています。 サイド バイ サイド アセンブリの開発者は、複数のバージョンのコンポーネントが同じプロセスで同時に実行されたときに正しく動作するように設計およびテストする必要があります。

  • WINDOWS XP より前のシステムでコンポーネントを共有コンポーネントとして提供する予定の場合は、これらのシステムに引き続き単一インスタンス共有コンポーネントとしてコンポーネントをインストールする必要があります。 この場合は、コンポーネントに下位互換性があることを確認する必要があります。

  • アセンブリの複数のバージョンがシステム上で実行されている場合に、オブジェクトの使用を評価します。 アセンブリのさまざまなバージョンで、メモリ マップされたファイル、名前付きパイプ、登録済みのWindows メッセージとクラス、共有メモリ、セマフォ、ミューテックス、ハードウェア ドライバーなどの個別のデータ構造が必要かどうかを判断します。 アセンブリ バージョン間で使用されるすべてのデータ構造は、下位互換性が必要です。 バージョン間で使用できるデータ構造と、バージョンに対してプライベートにする必要があるデータ構造を決定します。 共有データ構造でセマフォやミューテックスなどの個別の同期オブジェクトが必要かどうかを判断します。

  • ウィンドウ クラスや Atoms などの一部のオブジェクトは、プロセスごとに一意に名前が付けられます。 ウィンドウ クラスなどのオブジェクトは、マニフェストを使用してアセンブリごとにバージョン管理する必要があります。 Atoms などのオブジェクトの場合は、バージョン間で共有する予定がない限り、バージョン固有の識別子を使用します。 バージョン固有の識別子を使用する場合は、4 部構成のバージョン番号を使用します。

  • 任意の DLL に自己登録コードを含めないことを示します。 サイド バイ サイド アセンブリ内の DLL を自己登録することはできません。

  • #define ステートメントを使用して、DLL 内のすべてのバージョン固有の名前を定義します。 これにより、すべてのレジストリ キーを 1 つの場所から変更できます。 アセンブリの新しいバージョンをリリースする場合は、この#defineステートメントのみを変更する必要があります。 次に例を示します。

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • Temp ディレクトリ内の非永続データをMicrosoft Storeします。

  • ユーザー データをグローバルな場所に配置しないでください。 アプリケーション データとユーザー データは区別しないようにします。

  • すべての共有ファイルに、アプリケーションの名前に依存するファイル バージョンを割り当てます。

  • プロセス間で使用されるすべてのメッセージとデータ構造をバージョンに割り当てて、意図しないプロセス間の共有を防ぎます。

  • DLL は、異なるバージョンのアセンブリ間で共有されない共有メモリ セクションなど、存在しない可能性のあるバージョン間での共有に依存しないようにしてください。

  • 元の DLL のバイナリ インターフェイス互換性コントラクトに従わない新しい機能を追加する場合は、新しい CLSID、ProgId、およびファイル名を割り当てる必要があります。 その後、この CLSID、ProgId、およびファイル名を使用するには、サイド バイ サイド アセンブリの将来のバージョンが必要になります。 これにより、サイド バイ サイドではない DLL のバージョンがサイド バイ サイド バージョンに登録されている場合に、競合が回避されます。

  • 同じ CLSID または ProgId を再利用する場合は、アセンブリに下位互換性があることを確認するテストを行います。

  • アセンブリ コードでアセンブリの既定の設定を初期化して設定します。 レジストリに既定の設定を保存しないでください。

  • すべてのデータ構造にバージョンを割り当てます。

  • 「サイド バイ サイド アセンブリの作成状態Storage」の説明に従って、DLL はサイド バイ サイド アセンブリの状態を格納する必要があります。