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

アセンブリ バインディング動作は、次の 3 つの XML ファイルに基づいて、さまざまなレベルで設定できます。

  • アプリケーション構成ファイル

  • 発行者ポリシー ファイル

  • マシン構成ファイル

これらのファイルには、特定のアセンブリについて、バインディング リダイレクト、コードの場所、バインディング モードなどの情報が同じ構文で記述されています。 各構成ファイルに、バインディング プロセスをリダイレクトする <assemblyBinding> 要素を含めることができます。 <assemblyBinding> 要素の子要素には <dependentAssembly> 要素があります。 <dependentAssembly> 要素の子要素には、<assemblyIdentity> 要素<bindingRedirect> 要素、および <codeBase> 要素があります。

メモメモ

構成情報は、この 3 つの構成ファイル内に含まれていますが、すべての要素がすべての構成ファイルで有効なわけではありません。たとえば、バインディング モードやプライベート パス情報は、アプリケーション構成ファイルだけに含めることができます。各ファイルに含まれる情報の完全な一覧については、「アプリケーションの設定」を参照してください。

アプリケーション構成ファイル

最初に、共通言語ランタイムは、アプリケーション構成ファイル内に呼び出し元アセンブリのマニフェストに格納されているバージョン情報をオーバーライドする情報がないかどうかをチェックします。 アプリケーション構成ファイルはアプリケーションと共に配置できますが、アプリケーションの実行にとっては必須ではありません。 通常、このファイルはほとんど瞬時に取得できますが、Internet Explorer Web ベースのシナリオの場合のように、アプリケーション ベースがリモート コンピューターに存在するときは、構成ファイルをダウンロードする必要があります。

クライアント実行可能ファイルの場合、アプリケーション構成ファイルは、アプリケーションの実行可能ファイルと同じディレクトリに配置され、実行可能ファイルと同じ名前に拡張子 .config を付けた基本名が割り当てられます。 たとえば、C:\Program Files\Myapp\Myapp.exe の構成ファイルは、C:\Program Files\Myapp\Myapp.exe.config です。 ブラウザー ベースのシナリオでは、HTML ファイルの <link> 要素を使用して構成ファイルを明示的にポイントする必要があります。

次のコードは、アプリケーション構成ファイルの簡単な例を示します。 この例では、TextWriterTraceListenerListeners コレクションに追加し、デバッグ情報のファイルへの記録を有効にします。

<configuration>
   <system.diagnostics>
      <trace useGlobalLock="false" autoflush="true" indentsize="0">
         <listeners>
            <add name="myListener" type="System.Diagnostics.TextWriterTraceListener, system version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
         </listeners>
      </trace>
   </system.diagnostics>
</configuration>

発行者ポリシー ファイル

次に、ランタイムは、発行者ポリシー ファイルが存在する場合、このファイルをチェックします。 発行者ポリシー ファイルは、コンポーネントの発行者が共有コンポーネントへの修正または更新として配布します。 発行者ポリシー ファイルには、アセンブリ参照を新しいバージョンに伝える共有コンポーネントの発行者によって発行された互換情報が含まれています。 アプリケーション構成ファイルやマシン構成ファイルとは異なり、発行者ポリシー ファイルは、グローバル アセンブリ キャッシュにインストールする必要のあるその発行者ポリシー ファイルに固有のアセンブリに含める必要があります。

発行者ポリシーの構成ファイルの例を次に示します。

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

            <dependentAssembly>
                <assemblyIdentity name="asm6" publicKeyToken="c0305c36380ba429" /> 
                <bindingRedirect oldVersion="3.0.0.0" newVersion="2.0.0.0"/>  
            </dependentAssembly>

        </assemblyBinding>
    </runtime>
</configuration>

アセンブリを作成するには、Al.exe (アセンブリ リンカー) ツールを使用し、次のようにコマンドを指定します。

Al.exe /link:asm6.exe.config /out:policy.3.0.asm6.dll /keyfile: compatkey.dat /v:3.0.0.0

compatkey.dat は厳密な名前のキー ファイルです。 このコマンドにより、グローバル アセンブリ キャッシュに配置できる、厳密な名前のアセンブリが作成されます。

メモメモ

発行者ポリシーは、同じ共有コンポーネントを使用するすべてのアプリケーションに適用されます。

発行者ポリシー構成ファイルは、アプリケーションからのバージョン情報 (つまり、アセンブリ マニフェストまたはアプリケーション構成ファイルからのバージョン情報) をオーバーライドします。 アプリケーション構成ファイルに、アセンブリ マニフェストに指定されているバージョンをリダイレクトするように指示するステートメントがない場合、発行者ポリシー ファイルは、アセンブリ マニフェストに指定されているバージョンをオーバーライドします。 しかし、アプリケーション構成ファイルにリダイレクト ステートメントがある場合、発行者ポリシーは、マニフェストに指定されているバージョンではなく、アプリケーション構成ファイル内のバージョン情報をオーバーライドします。

発行者ポリシー ファイルを使用するのは、共有コンポーネントが更新され、そのコンポーネントを使用するすべてのアプリケーションが共有コンポーネントの新しいバージョンを選択する必要がある場合です。 アプリケーション構成ファイルにセーフ モードが適用されていない限り、アプリケーション構成ファイル内の設定は、発行者ポリシー ファイル内の設定によってオーバーライドされます。

セーフ モード

通常、発行者ポリシー ファイルは、Service Pack またはプログラム更新の一部として明示的にインストールされます。 アップグレードされた共有コンポーネントに何か問題がある場合は、セーフ モードを使用して発行者ポリシー ファイル内のオーバーライドを無視できます。 セーフ モードは、<publisherPolicy apply="yes |no"/> 要素によって決定されます。この要素は、アプリケーション構成ファイル内だけに含まれています。 この要素は、発行者ポリシーの構成情報をバインディング プロセスから削除するかどうかを指定します。

セーフ モードは、アプリケーション全体に対して設定するか、または選択したアセンブリに対して設定できます。 つまり、アプリケーションを構成するすべてのアセンブリのポリシーをオフに設定するか、または一部のアセンブリについてだけポリシーをオフにし、それ以外はオフにしないように設定できます。 アプリケーションを構成するアセンブリのうち選択したアセンブリに発行者ポリシーを適用するには、<publisherPolicy apply=no/> を設定し、<dependentAssembly> 要素を使用して、どちらのアセンブリが必要かどうかを指定します。 アプリケーションを構成するすべてのアセンブリに発行者ポリシーを適用するには、<publisherPolicy apply=no/> を設定し、依存アセンブリ要素は設定しません。 構成の詳細については、「構成ファイル」を参照してください。

マシン構成ファイル

3 番目に、ランタイムはマシン構成ファイルをチェックします。 このファイルは、Machine.config という名前で、ローカル コンピューターの、ランタイムがインストールされているルート ディレクトリの Config サブディレクトリにあります。 管理者は、このマシン構成ファイルを使用して、そのコンピューターに固有のアセンブリ バインディング制限を指定できます。 マシン構成ファイル内の設定は、ほかのすべての構成設定に優先します。ただし、これは、すべての構成設定をこのマシン構成ファイルに配置する必要があるという意味ではありません。 管理者ポリシー ファイルによって決定されるバージョンは最終的であり、オーバーライドすることはできません。 Machine.config ファイル内に指定されたオーバーライドは、すべてのアプリケーションに作用します。 構成ファイルの詳細については、「構成ファイル」を参照してください。

参照

概念

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

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

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

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

部分アセンブリ参照