2009-04-04 23 views
4

私が書いている.netアプリケーションでは、元の場所が利用できなくてもアプリケーションで使用できるように、さまざまな場所からアセンブリをローカルにキャッシュする必要があります。私はGACを使用することができません(主に移植性が必要で、アセンブリに署名がない可能性があるためです)。独自の.NETアセンブリキャッシュを作成する

誰でもこの機能をサポートしている.netコードを知っていますか?特定のアセンブリがすでにキャッシュに入っていて、異なるバージョンのアセンブリを処理しているかどうかを私に知らせるためにはキャッシュが必要です。私自身のアセンブリキャッシュを書くことに頼る必要があるかもしれませんが、すでに済んでいれば本当に "ホイールを再発明"したくないので、私はこの質問をすると思いました。

答えて

2

私は自分のアセンブリキャッシュを書くためになってしまった...

はここで彼らは自分のアセンブリキャッシュを実装する必要がある場合は他の人を助けるために、それがどのように動作するかの基本です:

  • キャッシュは、アプリケーション内の対応するラッパークラスを持つフォルダーです。
  • キャッシュにアセンブリをインストールする方法は、呼び出し元が保存して後でアセンブリを取得するために使用できる文字列 'token'(アセンブリがインストールされている名前)を返します。
  • アセンブリを取得するメソッドはトークンを取り、キャッシュされたアセンブリの情報をカプセル化するオブジェクトを返します。アセンブリを取り付けるとき、まず既にキャッシュアセンブリのそれぞれのビットに入ってくるアセンブリのビットを比較し、アセンブリが既にインストールされているかどうかを判断

(すべてのビットが同じである場合、それらは明らかに同じことを行う必要があります物)。アセンブリが既にインストールされている場合は、以前にキャッシュされたアセンブリの名前を返します。まだインストールされていない場合は、キャッシュフォルダ内のアセンブリ名(assembly.dll、アセンブリ - (2).dll、アセンブリ - (3).dllなど)を使用して、アセンブリをフォルダにキャッシュし、キャッシュされた名前を呼び出し側に返します。

Bruce Payetteが "芝生の老朽化対策"(攻撃者が単に歩くことができるセキュリティ対策)と同じように、厳しいセキュリティと厳密な名前付けが行われている限り、周囲)。攻撃者がアセンブリを毒殺することを決めた場合、強固な名前が格納されている場所にアクセスし、その厳密な名前に簡単に変更することもできます。結局のところ、信頼できるソースからのみアセンブリを使用するという責任はユーザーにあります。ユーザーが悪質なアセンブリをインストールした場合、それは私のものではなく、彼のせいです。それでも、ユーザーの保護をさらに強化するために、アプリケーションで外部アセンブリを使用することはデフォルトでは無効になっています。しかし、他のアプリケーションでは、追加のセキュリティ層として強力な名前検証を実装することが理にかなっているかもしれません。

2

Mono projectは、GACを(再)実装しなければならず、Windows上で動作します。私はそこから始めるだろう。

関連する問題