部分アセンブリ参照

完全アセンブリ参照には、アセンブリのテキスト名、バージョン、カルチャ、および公開キー トークン (アセンブリが厳密な名前を持つ場合) が含まれています。 共通言語ランタイムの一部であるアセンブリやグローバル アセンブリ キャッシュに配置されたアセンブリを参照する場合は、完全アセンブリ参照が必要です。 アセンブリ名だけを指定するなど、情報の一部だけを提供して、アセンブリを動的に参照することもできます。

部分アセンブリ参照の使用は、バージョン管理上の問題につながるおそれがあるため、お勧めできません。

  • アセンブリのバージョン間には下位互換性がない場合があります。 たとえば、使用するコードがアセンブリのバージョン 1.6 で機能していても、部分アセンブリ参照のためにその後のバージョンに互換性のない変更が行われている可能性があります。

  • アセンブリのバージョン間に上位互換性がない場合があります。 たとえば、使用するコードがアセンブリのバージョン 1.6 で機能していても、部分アセンブリ参照のためにそれより前のバージョンに必要なコードが含まれていない可能性があります。

  • 新しいバージョンのアセンブリをインストールするアプリケーションは、そのバージョンに互換性がない場合に、部分アセンブリ参照を使用してアセンブリを読み込むアプリケーションを壊す可能性があります。

バージョン管理上の問題が生じる可能性がきわめて高いため、.NET Framework Version 2.0 では LoadWithPartialName メソッドは互換性のために残されているものとしてマークされています。

部分アセンブリ参照の作成

コード内のアセンブリを部分参照するには、次のいずれかの方法を使用します。

  • System.Reflection.Assembly.Load などのメソッドを使用し、部分参照だけを指定します。 ランタイムは、アプリケーション ディレクトリ内でアセンブリをチェックします。

  • System.Reflection.Assembly.LoadWithPartialName メソッドを使用し、部分参照だけを指定します。 ランタイムは、アプリケーション ディレクトリ内およびグローバル アセンブリ キャッシュ内でアセンブリをチェックします。

メモメモ

LoadWithPartialName メソッドは .NET Framework Version 2.0 で互換性のために残されています。

LoadWithPartialName メソッドを使用することで、多様なバインディング プロセスが可能になります。 たとえば、厳密な名前を持つアセンブリへのバインドを要求し、参照の中に公開キーを含めなかった場合、バインドするアセンブリが、予期した発行者からのアセンブリであるという保証はありません。 また、公開キー トークンを含まない参照は、バージョン ポリシーの対象外であるため、アプリケーション構成ファイルやマシン構成ファイルはチェックされません。 LoadWithPartialName メソッドを使用する部分参照は、アセンブリの最新バージョンを選択する場合に最も適しています。

  • System.Reflection.Assembly.Load などのメソッドを使用し、部分参照だけを指定します。その後、アプリケーション構成ファイルで完全な参照情報を指定します。

LoadWithPartialName メソッドを使用した部分参照

メモメモ

LoadWithPartialName メソッドは .NET Framework Version 2.0 で互換性のために残されています。

LoadWithPartialName メソッドの呼び出しには、少なくともアセンブリのテキスト名を含める必要がありますが、公開キー トークン、バージョン、またはカルチャを含めることもできます。 部分参照だけが必要なメソッドを使用しているため、完全参照情報 (名前、バージョン、カルチャ、および適用可能な場合は公開キー トークン) を含める必要はありません。

LoadWithPartialName メソッドを使用してアセンブリを部分参照すると、ランタイムは特定の規則を使用して参照先アセンブリを検索します。 これらの規則は、次のとおりです。

  1. ランタイムは、アプリケーション構成ファイル内の <qualifyAssembly> 要素に参照のための限定情報があるかどうかをチェックします。 有効なエントリが見つかった場合は、完全参照の場合と同じようにバインディング プロセスが実行されます。

  2. ランタイムは、次に、アプリケーション ディレクトリ内で、指定したアセンブリ テキスト名と一致するアセンブリを検索します。 一致するアセンブリが見つかった場合、ランタイムはそのアセンブリを使用します。

  3. アプリケーション ディレクトリ内で一致するアセンブリが見つからなかった場合、ランタイムはグローバル アセンブリ キャッシュをチェックします。 部分参照に公開キー トークン、バージョン、またはカルチャが指定されている場合、ランタイムはその値と正確に一致するアセンブリを検索しようとします。 バージョンが指定されていない場合、ランタイムは指定されているほかの基準と一致する最新のバージョン番号を持つアセンブリを検索しようとします。 カルチャまたは公開キー トークンが指定されていない場合のランタイムの動作は不明です。

    たとえば、Assembly.LoadWithPartialName("math, Version 5.0.0.0") 呼び出しを実行し、グローバル アセンブリ キャッシュの内容が次のとおりであるとします。

    math,version=5.0.0.0,publicKeyToken=11111111,culture=de
    math,version=5.0.0.0,publicKeyToken=22222222,culture=en
    

    この呼び出しの結果は不明です。 ランタイムは、最初に見つけたアセンブリを選択します。

    もう 1 つの例として、Assembly.LoadWithPartialName("math") 呼び出しを実行し、グローバル アセンブリ キャッシュの内容が次のとおりであるとします。

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    この呼び出しの結果、数値演算アセンブリ、バージョン 6.0.0.0 にバインドされます。

    最後の例として、Assembly.LoadWithPartialName("math,publicKeyToken=11111111") 呼び出しを実行し、グローバル アセンブリ キャッシュの内容が次のとおりであるとします。

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    この呼び出しの結果、数値演算アセンブリ、バージョン 5.0.0.0 にバインドされます。

限定情報による部分参照

System.Reflection.Assembly.Load などのメソッドを使用して動的参照を行い、部分参照だけを提供し、その後でアプリケーション構成ファイル内の <qualifyAssembly> 要素を使用して参照を限定することもできます。 この要素を使用すると、完全な参照情報 (名前、バージョン、カルチャ、および適用可能な場合は公開キー トークン) をコード内ではなく、アプリケーション構成ファイル内に提供できます。

メモメモ

このタイプの部分参照は、複数のアプリケーションで共有されるアセンブリに対しては使用しないでください。構成設定はアセンブリ別ではなくアプリケーション別に適用されるため、このタイプの部分参照を使用する共有アセンブリについては、その共有アセンブリを使用するアプリケーションごとに、そのアプリケーションの構成ファイル内に限定情報を含める必要があります。

参照

概念

ランタイムがアセンブリを検索する方法

手順 1: 構成ファイルのチェック

手順 2: 前に参照したアセンブリの検索

手順 3: グローバル アセンブリ キャッシュのチェック

手順 4 : コードベースまたはプローブによるアセンブリの検索