2010-12-02 18 views
6

私は2つのアセンブリAとBを持っています。Aは強い名前であり、Bはそうではありません。リフレクションを使用して、符号付きアセンブリから符号なしアセンブリの型を読み込むことができるのはなぜですか?

MSDNによると、強力な名前付きアセンブリは別の強力な名前付きアセンブリのみを参照できるため、AからBを参照することはできません。

しかし、アセンブリBをロードし、そのクラスをインスタンス化し、リフレクションを使用してアセンブリAからメソッドを呼び出すことはなぜ可能ですか?

// Inside assembly A 
Assembly b = Assembly.LoadFrom("B"); 
obj myObj = b.CreateInstance("MyClass"); 

これは、署名されていないアセンブリを署名付きアセンブリで参照することを許可しないという目的を打ち消しませんか?

+2

試しましたか? –

+0

@Logan - 質問を更新しました –

答えて

8

さて、厳密な名前のアセンブリは、 "DLL Hell"を回避し、 "side-by-side versioning"を可能にするように設計されていることを理解する必要があります。 AFAIKはセキュリティのために設計されていません。

したがって、厳密な名前のアセンブリでリフレクションを使用して、メソッドを呼び出したり、署名されていないアセンブリでクラスをインスタンス化することは許可されています。このフレームワークでは、明示的にファイルを読み込んでいるために何をしているのかを前提としているため、本当に必要なファイルを知っている必要があります。言い換えれば、あなたはフレームワークにこう言います。「このアセンブリでは、私自身のバージョン管理を管理したい」

+1

厳密な名前のアセンブリに対するセキュリティコンポーネントは間違いありません。[何が違うのですか、パート5:証明書署名と強力な名前付け](http://blogs.msdn.com/b/)を参照してください。 ericlippert/archive/2009/09/03/what-s-the-difference-part-five-certificate-signing-vs-strong-naming.aspx)を参照してください。基本的に、アセンブリのIDを確認することができます。これがなければ、マルウェアは信頼できるアセンブリを簡単に置き換えることができます。また、OPは、リフレクションを使用してインスタンスを作成するために厳密に名前が付けられたアセンブリだけでなく、完全に信頼できるアセンブリを使用する必要があります。 –

関連する問題