6

我有两个程序集 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 Hell”并允许“并行版本控制”。AFAIK 它不是为安全而设计的。

因此,您可以在强名称程序集中使用反射来调用方法并实例化无符号程序集中的类。该框架假定您知道自己在做什么,因为您正在显式加载文件——因此您应该知道您真正想要的文件。换句话说,您是在告诉框架:“对于这个程序集,我想管理我自己的版本控制。”

于 2011-03-22T06:18:50.497 回答