アセンブリ バージョンのリダイレクト

厳密な名前が付いたアセンブリの特定のバージョンに対して .NET Framework アプリケーションを構築すると、そのアプリケーションは実行時にそのバージョンのアセンブリを使用します。しかし、そのアプリケーションを、より新しいバージョンのアセンブリを使用して実行する必要が生じることもあります。アプリケーション構成ファイル、マシン構成ファイル、または発行者ポリシー ファイルを使用すると、アセンブリ バージョンを別のバージョンにリダイレクトできます。共通言語ランタイムがこれらの構成ファイルを使用して、使用するアセンブリ バージョンを決定する方法については、「ランタイムがアセンブリを検索する方法」を参照してください。.NET Framework 構成ツール (Mscorcfg.msc) を使用してアプリケーション レベルとマシン レベルの両方でアセンブリ バージョンをリダイレクトするか、または構成ファイルを直接編集できます。

Noteメモ :

厳密な名前が付いていないアセンブリのバージョンはリダイレクトできません。共通言語ランタイムは、厳密な名前の付いていないアセンブリのバージョンは無視します。

発行者ポリシーを使用したアセンブリ バージョンのリダイレクト

アセンブリの販売元は、アップグレードしたアセンブリに発行者ポリシー ファイルを含めることにより、より新しいバージョンのアセンブリを使用してアプリケーションを実行するように指示できます。発行者ポリシー ファイルは、グローバル アセンブリ キャッシュに配置され、アセンブリ リダイレクトの設定が格納されます。

アセンブリの major.minor バージョンごとに、独自の発行者ポリシー ファイルが割り当てられます。たとえば、バージョン 1.1.2.222 から 1.1.3.000 へのリダイレクトと、バージョン 1.1.2.321 から 1.1.3.000 へのリダイレクトは、両方とも同じファイルに記述します。ただし、バージョン 2.0.0.999 から 3.0.0.000 へのリダイレクトは、別のファイルに記述します。

発行者ポリシー ファイルが存在する場合、ランタイムは、アセンブリのマニフェストとアプリケーション構成ファイルをチェックした後で、発行者ポリシー ファイルをチェックします。販売元は、新しいアセンブリがリダイレクト元のアセンブリとの下位互換性を維持している場合にだけ、発行者ポリシーを使用するようにします。

アプリケーション構成ファイルに設定を記述することにより、発行者ポリシーを省略することもできます。

発行者ポリシーの省略

下位互換性を維持しているとされている新しいアセンブリ バージョンでも、アプリケーションを破壊する可能性はあります。このようなことが起こる場合は、アプリケーション構成ファイルに次の設定を記述して、ランタイムに発行者ポリシーを省略させることができます。

<publisherPolicy apply="no" />

発行者ポリシーを省略することにより、アプリケーションの実行を続行できますが、必ず、問題点をアセンブリの販売元に報告してください。アセンブリに発行者ポリシーを提供した場合、販売元はそのアセンブリが下位互換性を維持していること、およびクライアントが可能な限り新バージョンを使用できることを確認する必要があります。

アプリケーション レベルでのアセンブリ バージョンのリダイレクト

アセンブリの販売元が、アプリケーションが使用しているアセンブリの新バージョンをリリースしたが、その新しいアセンブリの元のバージョンとの下位互換性を保証しないために、発行者ポリシーを提供しなかったと仮定します。開発者は、アプリケーションの構成ファイルにアセンブリ バインディング情報を含めることにより、そのアプリケーションがアセンブリの新バージョンを使用するように指定できます。

マシン レベルでのアセンブリ バージョンのリダイレクト

コンピュータ管理者が 1 つのコンピュータ上のすべてのアプリケーションで特定のアセンブリ バージョンを使用する場合も、まれにあります。たとえば、セキュリティ ホールを修復するために、すべてのアプリケーションで特定のアセンブリ バージョンを使用する場合があります。アセンブリをマシン構成ファイル内でリダイレクトした場合は、旧バージョンを使用しているすべてのアプリケーションが新バージョンを使用するようになります。マシン構成ファイルは、アプリケーション構成ファイルおよび発行者ポリシーより優先されます。

構成ファイル内でのアセンブリ バインディングの指定

アセンブリ構成ファイル、マシン構成ファイル、および発行者ポリシー ファイルは、同じ XML スキーマを使用してアセンブリ リダイレクトを処理します。

アセンブリ バインディング

各アセンブリについての情報を <dependentAssembly> 要素内部に含めることにより、アセンブリについての情報を指定します。<assemblyIdentity> 要素には、アセンブリを識別する情報を含めます。構成ファイル内に複数の <dependentAssembly> 要素を記述できますが、<assemblyIdentity> 要素は、<dependentAssembly> 要素ごとに 1 つだけ含めることができます。

アセンブリをバインドするには、<assemblyBinding> タグ内の xmlns 属性に対して文字列 "urn:schemas-microsoft-com:asm.v1" を指定する必要があります。

発行者ポリシーの指定

特定のアセンブリの発行者ポリシーを省略するようにランタイムに指示するには、<dependentAssembly> 要素内に <publisherPolicy> 要素を含めます。アプリケーションで使用するすべてのアセンブリの発行者ポリシーを省略するようにランタイムに指示するには、この設定を <assemblyBinding> 要素内に含めます。また、.NET Framework 構成ツール (Mscorcfg.msc) を使用して発行者ポリシーを省略することもできます。

apply 属性の既定の設定は yes です。apply 属性を no に設定すると、既に設定されていたすべての yes がオーバーライドされます。たとえば、アプリケーション レベルで applyno に設定した場合、アセンブリ固有の apply 設定は、その値が yes と指定されている場合でも、すべて無視されます。このように、この no の設定は、既定値を変更するときだけ使用する意味があります。

アセンブリ バージョンのリダイレクト

あるバージョンを別のバージョンにリダイレクトするには、<bindingRedirect> 要素を使用します。oldVersion 属性には、1 つのバージョンまたはバージョンの範囲を指定できます。たとえば、<bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> は、アセンブリ バージョン 1.1.0.0 ~ 1.2.0.0 の代わりにバージョン 2.0.0.0 を使用するようにランタイムに指示します。

myAssembly のあるバージョンを別のバージョンにリダイレクトし、mySecondAssembly の発行者ポリシーをオフにする方法の例を次に示します。

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />
        <!-- Assembly versions can be redirected in application, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
      <assemblyIdentity name="mySecondAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the application 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

.NET Framework アセンブリ バインディングのリダイレクト

アプリケーション構成ファイルの <assemblyBinding> 要素で appliesTo 属性を使用して、アセンブリ バインディングの参照を特定のバージョンの .NET Framework にリダイレクトできます。このオプションの属性では、.NET Framework バージョン番号を使用して、適用するバージョンを指定します。appliesTo 属性が指定されていない場合、<assemblyBinding> 要素は .NET Framework のすべてのバージョンに適用されます。

appliesTo 属性は .NET Framework Version 1.1 で導入されました。.NET Framework Version 1.0 では無視されます。つまり、appliesTo 属性が指定されている場合でも、.NET Framework Version 1.0 を使用しているときはすべての <assemblyBinding> 要素が適用されます。

たとえば、.NET Framework Version 1.0 の Regcode アセンブリのアセンブリ バインディングをリダイレクトするには、アプリケーション構成ファイルに次の XML コードを含めます。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 
    appliesTo="v1.0.3705">
    <dependentAssembly> 
      <!-- assembly information goes here -->
    </dependentAssembly>
  </assemblyBinding>
</runtime>

<assemblyBinding> 要素は、順番が区別されます。最初に .NET Framework Version 1.0 のアセンブリのアセンブリ バインディング リダイレクト情報を入力し、その次に .NET Framework Version 1.1 のアセンブリのアセンブリ バインディング リダイレクト情報を入力します。最後に、appliesTo 属性を使用せず、すべてのバージョンの .NET Framework に適用される .NET Framework アセンブリ リダイレクトのアセンブリ バインディング リダイレクト情報を入力します。リダイレクトで矛盾が発生した場合は、構成ファイル内で最初に一致したリダイレクト ステートメントが使用されます。

たとえば、ある参照を .NET Framework Version 1.0 のアセンブリにリダイレクトし、別の参照を .NET Framework Version 1.1 のアセンブリにリダイレクトするには、次の擬似コードに示すパターンを使用します。

<assemblyBinding xmlns="..." appliesTo="v1.0.3705"> 
  <!—.NET Framework version 1.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v1.1.5000"> 
  <!—.NET Framework version 1.1 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
  <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>

参照

処理手順

方法 : 発行者ポリシーを作成する

関連項目

ランタイム設定スキーマ

概念

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

その他の技術情報

共通言語ランタイムのアセンブリ
アセンブリを使用したプログラミング
構成ファイル
アプリケーションの設定
.NET Framework の構成ファイル スキーマ