解説

インサイド .NET Framework [改訂版]

第4回 アセンブリとバージョン管理

吉松 史彰
2003/07/16

Page1 Page2 Page3 Page4 Page5

バージョン・ポリシーの適用順

 以上のように、アプリケーションが参照するアセンブリをリダイレクトするためのバージョン・ポリシーは、複数の場所で記述することができる。このため、あるアセンブリに関するバージョン・ポリシーが複数存在することも考えられる。そのとき、ポリシーは次のように適用される。

 メタデータを参照してアセンブリの初期バージョンが決定すると、CLRはまずアプリケーションの構成ファイルを探す。アプリケーションの構成ファイルにバージョン・リダイレクトの情報が書いてある場合、その情報が適用されて、新しいバージョンが検索対象となる。

 次に、CLRは発行者ポリシーを探す。このとき対象となっているバージョンは、メタデータに書いてある元のバージョンではなく、すでにアプリケーション構成ファイルによってリダイレクトされた新しいバージョンである。発行者ポリシーでその新しいバージョンをさらに別のバージョンにリダイレクトするポリシーが見付かった場合、それが適用される。

 最後に、CLRはマシン・ポリシーを探す。このときの対象バージョンはやはり発行者ポリシーによってリダイレクト済みの最新のバージョンである。その最新のバージョンをさらに別のバージョンにリダイレクトするポリシーがあれば、それが適用される。

 以上、3つの流れを図に示すと次のようになる。

バージョン・ポリシーの適用順序
3種類のバージョン・ポリシーはこの図に示した順で検索され、適用される。

 このように、マシン・ポリシーに書いてあるバージョンが最終的にロードされるバージョンになる。ただし、これは必ずしも「マシン・ポリシーが最も優先される」という意味ではないことにも注意が必要だ。例えば、次の図のように、アプリケーションの構成ファイルでマシン・ポリシーに記述がないまったく別のバージョンにリダイレクトがかかった場合、マシン・ポリシーには設定が何もないので、適用はされない。

アプリケーション構成ファイルのポリシーのみが適用される場合
必ずしもマシン・ポリシーが最優先されるわけではない。例えば、マシン・ポリシーでの記述に該当するリダイレクトされたバージョンが存在しない場合、このポリシーは適用されない。

 アプリケーションの構成ファイルとマシン・ポリシーに両方ともバージョン1.0.0.0のアセンブリに関するバージョン・ポリシーが設定されていた場合、適用されるのはアプリケーションの構成ファイルのポリシーである。

 このようにして、最終的に決定したバージョン番号を使ってアセンブリの厳密名を決定し、第3回に解説した手順でアセンブリの探索が行われるのである。

発行者ポリシーの拒否

 ユーザーはこれまで何度も苦い思いをしている。あるアプリケーションをインストールした途端、別のアプリケーションが動作しなくなってしまうという悪夢だ。それも、一見何の関係もなさそうな、ブラウザとワープロの組み合わせだったりするからたちが悪い。.NET Frameworkにおけるアセンブリの場合も、発行者ポリシーによって強制的に新しいバージョンにリダイレクトされた結果、その新しいバージョンのアセンブリがほかのアプリケーションと相性が悪いなどということが起こるかもしれない。

 そのためマイクロソフトは、.NET Frameworkに「セーフ・モード」を導入した。.NET Frameworkにおけるセーフ・モードとは、アプリケーションがコンパイルされ、デバッグされ、テストされたときの状態に戻るという機能だ。この機能は、要するに発行者ポリシーによるバージョン・リダイレクトを無効化することを意味する。

 設定は簡単で、アプリケーションの構成ファイルの<dependentAssembly>要素に次のような要素を設定すればよい。

<publisherPolicy apply="no" />

 これが書いてあると、バージョン・ポリシーの適用順は上記の手順から発行者ポリシーを除いたものになる。つまり、まずアプリケーションの構成ファイルが適用され、次にマシン・ポリシーが適用される。これによって、開発者(配布元)からのバグ付きのバージョンアップを拒否できるようになっている。つまり、開発者はアセンブリのバージョンに関する最終的な判断をユーザーに強制できないのだ。ユーザー(管理者)が常に最後の判断を行えるようになっている。


 INDEX
  解説 インサイド .NET Framework [改訂版]
  第4回 アセンブリとバージョン管理
    1.アセンブリのサイドバイサイド実行
    2.バージョン・ポリシーによるバージョン・リダイレクト
  3.バージョン・ポリシーの適用順
    4..NET Framework Configuration管理ツール
    5.アプリケーションの修復
 
インデックス・ページヘ  「解説:インサイド .NET Framework [改訂版]」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間