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

ターン:  http://msdn.microsoft.com/en-us/library/yx7xezcf(vs.71).aspx

正常に.NET Frameworkアプリケーションをデプロイするには、共通言語ランタイムが見つけて、あなたのアプリケーションを構成するアセンブリに結合する方法を理解する必要があります。デフォルトでは、ランタイムは、アプリケーションがで構築されたアセンブリの正確なバージョンをバインドしようとします。このデフォルトの動作は、設定ファイルの設定で上書きすることができます。

共通言語ランタイムがアセンブリを検索し、アセンブリ参照を解決しようとするステップ数を実行します。各ステップは、次のセクションで説明されています。ランタイムがアセンブリを検索する方法について説明する際に用語のプロービングがしばしば使用されています。それは、その名前や文化に基づいてアセンブリを配置するために使用されるヒューリスティックのセットを指します。

なお、    あなたが使用してログファイルにバインディング情報を表示することができます  アセンブリバインディングログビューア(Fuslogvw.exeでは)の.NET Framework SDKに含まれています、。

バインドを開始

ランタイムは別のアセンブリへの参照を解決しようとすると、アセンブリに配置および結合のプロセスが始まります。この基準は、静的または動的のいずれかであり得ます。コンパイラは、ビルド時にアセンブリマニフェストのメタデータの静的参照を記録します。動的参照は、次のような様々な方法、呼び出しの結果として、その場で構成され  System.Reflection.Assembly.Loadを

アセンブリを参照する好ましい方法は、アセンブリ名、バージョン、カルチャ、および公開鍵トークン(存在する場合)を含む、完全な参照を使用することです。ランタイムは、このセクションで後述する手順に従って、アセンブリを見つけるために、この情報を使用します。ランタイムは関係なく、基準は、静的または動的アセンブリのためのものであるか否かの同一の解決プロセスを使用します。

また、このようなだけでアセンブリ名を指定すると、アセンブリについての唯一の部分的な情報と呼び出し方法を提供することにより、アセンブリへの動的参照を行うことができます。この場合、唯一のアプリケーションディレクトリは、アセンブリを検索し、他のチェックが発生していません。あなたは、次のようなロード・アセンブリのための様々な方法のいずれか使用して部分的に参照します  System.Reflection.Assembly.Load  または  AppDomain.Loadをあなたはランタイムが参照されたアセンブリのグローバルアセンブリキャッシュだけでなく、アプリケーションディレクトリを確認したい場合は、使用して部分参照を指定できSystem.Reflection.Assembly.LoadWithPartialNameの  方法を。結合部分の詳細については、  部分的なアセンブリ参照を

最後に、次のような方法を使用して動的基準を作ることができ  System.Reflection.Assembly.Load  と部分的にしか情報を提供します。あなたはその後、<使用して参照を修飾qualifyAssemblyアプリケーション構成ファイルで>要素を。この要素は、アプリケーション構成ファイルではなく、あなたのコード内での完全なリファレンス情報(名前、バージョン、文化及び、該当する場合は、公開キートークン)を提供することができます。あなたは完全にアプリケーションディレクトリ外のアセンブリへの参照を修飾したい場合は、この手法を使用するか、グローバルアセンブリキャッシュにアセンブリを参照したかったが、あなたは、構成ファイル内の完全なリファレンスを指定する代わりにの利便性を望んでいたかのだろうあなたのコードインチ

   部分参照このタイプのいくつかのアプリケーション間で共有されているアセンブリで使用すべきではありません。構成設定は、アセンブリごとにアプリケーションごとに適用されていないので、部分的な基準のこのタイプを使用して共有アセンブリは、その構成ファイルに資格情報を持っている共有アセンブリを使用して、各アプリケーションが必要となります。

ランタイムはアセンブリ参照を解決するには、次の手順を使用しています。

  1. 正しいアセンブリバージョンを決定します  アプリケーション構成ファイル、発行者ポリシーファイル、およびマシン構成ファイルを含む、適用可能な構成ファイルを、調べることを。設定ファイルは、リモートマシン上に配置されている場合は、ランタイムは探し、最初のアプリケーション構成ファイルをダウンロードする必要があります。
  2. アセンブリ名が以前にバインドされているかどうかをチェックし そうならば、とは、以前に読み込まれたアセンブリを使用しています。
  3. グローバルアセンブリキャッシュをチェックしますアセンブリがそこに発見された場合、ランタイムは、このアセンブリを使用しています。
  4. アセンブリのためのプローブ  は、次の手順を使用して:
    1. 構成や発行者ポリシーは、元の参照に影響を与えていない場合は、バインド要求を使用して作成された場合  Assembly.LoadFromの方法、場所のヒントのためのランタイムチェックを。
    2. コードベースは、コンフィギュレーションファイル、実行時チェックのみ、この場所で発見された場合。このプローブが失敗した場合、ランタイムは、結合要求が失敗し、他のプロービングが発生していないと判断しました。
    3. 記載のヒューリスティック使用アセンブリのためのプローブ  のプロービングセクションアセンブリは、プロービング後に発見されていない場合、ランタイムはアセンブリを提供するために、Windowsインストーラを要求します。これは、オンデマンドインストール機能として動作します。
      なお、    そこに強い名前なしでアセンブリをチェックするバージョンがありません、また厳密な名前のないアセンブリのグローバルアセンブリキャッシュにランタイムチェックを行います。

ます。https://www.cnblogs.com/Jenny90/p/3508741.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33826268/article/details/93566844