次の方法で共有


サイド バイ サイド実行のためのコンポーネントの作成に関するガイドライン

この記事は .NET Framework に固有のものです。 .NET 6 以降のバージョンを含む、.NET の新しい実装には適用されません。

次の一般的なガイドラインに従って、並列実行用に設計されたマネージド アプリケーションまたはコンポーネントを作成します。

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

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

  • バージョン対応ストレージを使用します。

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

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

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

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

サイド バイ サイド実行のためにアプリケーションまたはコンポーネントを正常に設計するための 1 つの鍵は、分離です。 アプリケーションまたはコンポーネントは、分離された方法ですべてのリソース (特にファイル I/O) を管理する必要があります。 次のガイドラインに従って、アプリケーションまたはコンポーネントが分離して実行されるようにします。

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

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

  • ファイル名とディレクトリ名をバージョン対応にします。 つまり、ファイル構造はバージョン情報に依存する必要があります。

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

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

サイド バイ サイド実行用のアプリケーションを設計する場合は、バージョンのインストールとアンインストールに関する次のガイドラインに従ってください。

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

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

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

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

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

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

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

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

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

グローバル アセンブリ キャッシュ ツール (Gacutil.exe) を使用すると、ファイルのバージョン番号のみが新しい場合にアセンブリを置き換えることができます。 通常、インストーラーは、アセンブリのバージョン番号が大きい場合を除き、アセンブリにインストールされません。

こちらも参照ください