2011-09-14 18 views
1

MSDNのthis articleからの引用は次のとおりです。依存アセンブリのバージョンが参照アセンブリに格納されていますか?

...厳密な署名は、サービスをより複雑にします。 現在のバージョン管理ポリシーの下では、アセンブリは常に構築されたアセンブリの正確なバージョンの を読み込もうとします。たとえば、 アプリケーションがバージョン1.0.0.0の強力な名前の アセンブリに対してビルドされ、バージョン番号 を1.0.0.1にバンプすると、アセンブリ内にバグが修正された場合、既存のアプリケーションは更新された を見つけられませんアセンブリ。今

、(C#またはVB.netで書かれた)は、2つの名前付き厳密なアセンブリ、すなわち、X及びYは、存在すると仮定し、XがYのバージョンが格納されていY.

  1. に依存コンパイル時にXのどこかに?
  2. 変更攻撃を避けるために、Yで使用される公開鍵がXのどこかに格納されていますか?
  3. CLRがロードするときにYのバージョンがチェックされている場合、Y が動的にロードされ、コンパイル時間が参照されていないとどうなりますか?

可能であれば、あなたの回答に参考文献を投稿してください。

+0

アセンブリタグは、.NETアセンブリのためではなく、アセンブリプログラミングのためではありません参照してください。 – harold

+0

ありがとうharold。私は問題を修正した。 – hsalimi

+0

あなたの質問番号3は私が長い間前に作った実現を考えさせました... AssemblyResolveイベント(CLRが必要な依存関係を見つけることができず、あなたにそれをロードする機会を与えるときに起動する)を登録すると、 Assembly.LoadFromを呼び出して、必要なアセンブリをいくつかのエイリアンパスからロードします。これは動作します。 異なるバージョンのパスを指しているといいでしょう。別のDLLを完全に指しているとします。これも成功します。あなたがロードしたDLLは、要求されたアセンブリ名とバージョンを持つ 'バケツ' LABELEDに入れられ、残りのアプリケーションライフに使用されます! – Adam

答えて

2

コンパイル時または実行時に、強力な名前付きアセンブリを参照できます。

あなたはコンパイル時の参照を使用すると、コンパイラが自動的に組み立てビーイングの アセンブリ参照における標的厳密な名前付きアセンブリや場所、それの 公開鍵を取得します。

は、コンパイル時コンパイルされた。

だから、assembly manifestに格納されます:参照されるアセンブリの

情報:静的アセンブリによって参照されている他のアセンブリ のリスト。各参照 には、アセンブリ が強い名前の場合、従属アセンブリの名前アセンブリメタデータ(バージョン、 カルチャ、オペレーティングシステムなど)と公開キーが含まれます。

実行時間:

あなたは( 例えば、Assembly.LoadまたはAssembly.GetTypeメソッドを使用して)厳密な名前付きアセンブリに実行時の参照を作成し、あなたを は、参照される厳密な名前のアセンブリの表示名を使用する必要があります。ここで明らかに

<assembly name>, <version number>, <culture>, <public key token> 

あなたは、実行時にverison手動で指定する必要があります:表示名の 構文は次のとおりです。

How to: Reference a Strong-Named Assembly

+1

あなたのいい、明確で、参照され、自己完結型で、組織化され、構造化された答えをありがとう。すごく楽しかったです。 – hsalimi

2

1は、Yのバージョンは、コンパイル時にXのどこかに保存されていますか?

はい、すべてのアセンブリには、独自のIDと参照の「マニフェスト」が含まれています。

2コード変更攻撃を防ぐために、Yで使用される公開鍵がXのどこかに格納されていますか?

YのバージョンがときCLRは負荷それをチェックされている場合、Yは、動的にロードされ、何のコンパイル時の参照が存在しない場合は、[はい、それは

3、何が起こるのでしょうか?

これは通常、チェックしていないが、AssemblyName

関連する問題