side-by-side 実行用のコンポーネントを作成するためのガイドライン

side-by-side 実行用にデザインしたマネージド アプリケーションまたはマネージド コンポーネントを作成するときのガイドラインを次に示します。

  • 型 ID をファイルの特定のバージョンにバインドします。

    共通言語ランタイムは、厳密な名前付きのアセンブリを使用して、型 ID を特定のファイル バージョンにバインドします。 side-by-side 実行用のアプリケーションまたはコンポーネントを作成するには、すべてのアセンブリに厳密な名前を付ける必要があります。 これによって精密な型 ID が作成され、どのような型解決でも正しいファイルに接続されます。 厳密な名前付きのアセンブリには、バージョン、カルチャ、および発行元情報が含まれていて、ランタイムはこれを使用して、バインド要求を実行するために正しいファイルを検索します。

  • バージョンを認識するストレージを使用します。

    ランタイムは、グローバル アセンブリ キャッシュを使用して、バージョンを認識するストレージを提供します。 グローバル アセンブリ キャッシュはバージョンを認識するディレクトリ構造で、.NET Framework を使用するどのコンピューターにもインストールされています。 グローバル アセンブリ キャッシュにインストールされているアセンブリは、そのアセンブリの新しいバージョンがインストールされても、上書きされません。

  • 分離して実行されるアプリケーションまたはコンポーネントを作成します。

    分離して実行されるアプリケーションまたはコンポーネントは、それらのアプリケーションまたはコンポーネントの 2 つのインスタンスが同時に実行されるときの競合を避けるために、リソースを管理する必要があります。 また、アプリケーションまたはコンポーネントは、バージョン固有のファイル構造を使用する必要があります。

アプリケーションとコンポーネントの分離

side-by-side 実行用のアプリケーションまたはコンポーネントのデザインを成功させる鍵の 1 つとして、分離が挙げられます。 アプリケーションまたはコンポーネントは、特にファイル I/O をはじめとするすべてのリソースを、分離された方法で管理する必要があります。 アプリケーションまたはコンポーネントを、確実に分離して実行するには、次のガイドラインに従ってください。

  • バージョン固有の方法でレジストリに書き込みます。 バージョンを示したハイブまたはキーに値を格納し、コンポーネントのバージョンをまたいで情報や状態を共有しないようにします。 これにより、同時に実行されている 2 つのアプリケーションまたはコンポーネントが情報を上書きしてしまうことを防げます。

  • 競合状態が発生しないように、名前付きカーネル オブジェクトをバージョン固有にします。 たとえば、同じアプリケーションの 2 つのバージョンから生成された 2 つのセマフォが相互に待機すると、競合状態が発生します。

  • ファイル名とディレクトリ名でバージョンを認識できるようにします。 これは、ファイル構造がバージョン情報に依存することを意味します。

  • ユーザー アカウントとグループをバージョン固有の方法で作成します。 アプリケーションによって作成されるユーザー アカウントとグループを、バージョンで識別できるようにする必要があります。 アプリケーションのバージョン間で、ユーザー アカウントとグループを共有しないでください。

バージョンのインストールとアンインストール

side-by-side 用のアプリケーションをデザインするときは、バージョンのインストールとアンインストールに関する次のガイドラインに従ってください。

  • .NET Framework の異なるバージョンで実行されている他のアプリケーションによって必要になる可能性のある情報をレジストリから削除しないでください。

  • .NET Framework の異なるバージョンで実行されている他のアプリケーションによって必要になる可能性のある情報をレジストリ内で置き換えないでください。

  • .NET Framework の異なるバージョンで実行されている他のアプリケーションによって必要になる可能性のある COM コンポーネントの登録を解除しないでください。

  • 既に登録されている COM サーバー用の InprocServer32 または他のレジストリ エントリを変更しないでください。

  • .NET Framework の異なるバージョンで実行されている他のアプリケーションによって必要になる可能性のあるユーザー アカウントまたはグループを削除しないでください。

  • バージョン管理されていないパスを含むレジストリには何も追加しないでください。

ファイルのバージョン番号とアセンブリのバージョン番号

ファイルのバージョンは Win32 バージョン リソースであり、ランタイムでは使用されません。 一般に、インプレース更新の場合であっても、ファイルのバージョンを更新してください。 まったく同じ 2 つのファイルが異なるファイル バージョン情報を持つことや、2 つの異なるファイルが同じファイル バージョン情報を持つことがあります。

アセンブリのバージョンは、アセンブリ バインディングのためにランタイムによって使用されます。 2 つの同一のアセンブリであっても、バージョン番号が異なると、ランタイムによって 2 つの異なるアセンブリとして扱われます。

グローバル アセンブリ キャッシュ ツール (Gacutil.exe) では、ファイルのバージョン番号が新しい場合にのみ、アセンブリを置換できます。 一般的に、インストーラーは、アセンブリのバージョン番号が大きくない限り、アセンブリを上書きでインストールしません。

関連項目