6

私は2つのアセンブリAとBを持っています。Aは強い名前が付けられていますが、Bはそうではありません。

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

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

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

これは、署名されたアセンブリで署名されていないアセンブリを参照できないようにするという目的そのものを打ち負かしませんか?

4

1 に答える 1

8

さて、あなたは強い名前のアセンブリが「DLL地獄」を回避し、「サイドバイサイドバージョン管理」を可能にするように設計されていることを理解する必要があります。AFAIKそれはセキュリティのために設計されていません。

したがって、厳密な名前のアセンブリでリフレクションを使用して、メソッドを呼び出し、符号なしアセンブリのクラスをインスタンス化することができます。フレームワークは、ファイルを明示的にロードしているため、自分が何をしているかを知っていることを前提としています。したがって、本当に必要なファイルを知っている必要があります。つまり、フレームワークに「このアセンブリでは、自分のバージョン管理を管理したい」と言っているのです。

于 2011-03-22T06:18:50.497 に答える