为什么可以使用反射从签名程序集中加载无符号程序集的类型?

6
我有两个程序集A和B。A是强名称程序集,而B不是。
根据MSDN的说法,我无法从A中引用B,因为强名称程序集只能引用另一个强名称程序集。
但是为什么可以使用反射加载程序集B,实例化其类并从程序集A调用它们的方法呢?
// Inside assembly A
Assembly b = Assembly.LoadFrom("B");
obj myObj = b.CreateInstance("MyClass");

这难道不违背了在已签名程序集中不允许引用未签名程序集的初衷吗?
1个回答

8

请注意,强名称程序集是为了避免“DLL地狱”和允许“并行版本控制”而设计的。据我所知,它不是为了安全而设计的。

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


1
强名称程序集肯定有一个安全组件,请参见What's the Difference, Part Five: certificate signing vs strong naming。基本上,它允许您确认程序集的身份。如果没有这个,恶意软件可以轻易地替换受信任的程序集。此外,OP必须使用完全受信任的程序集而不仅仅是强名称程序集来使用反射创建实例。 - Conrad Frix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接