side-by-side 実行用のアプリケーションおよびコンポーネントを作成するときのガイドライン

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ファイル バージョンは、ランタイムによって使用されていない Win32 バージョン リソースです。一般的に、埋め込み先 QFE に対してもファイル バージョンを更新します。まったく同じ 2 つのファイルが別のファイル バージョン情報を持つことができ、2 つの異なるファイルが同じファイル バージョン情報を持つことができます。

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

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

参照

概念

アセンブリ バインディングのリダイレクト
アプリケーションおよびコンポーネントのサービス方針の決定

その他の技術情報

side-by-side 実行の基本
複数バージョンのアプリケーションまたはコンポーネントの作成