【问题标题】:Why is it possible to load types in an unsigned assembly from a signed assembly using reflection?为什么可以使用反射从已签名程序集中加载未签名程序集中的类型?
【发布时间】:2011-05-19 03:04:19
【问题描述】:

我有两个程序集 A 和 B。A 是强命名的,B 不是。

根据MSDN,我无法从 A 引用 B,因为强命名程序集只能引用另一个强命名程序集。

但是为什么可以加载程序集 B,实例化它的类并使用反射从程序集 A 调用它们的方法呢?

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

这是否违背了不允许在已签名程序集中引用未签名程序集的目的?

【问题讨论】:

  • @Logan - 我已经更新了问题

标签: .net reflection assemblies strongname


【解决方案1】:

好吧,您必须了解强名称程序集旨在规避“DLL Hell”并允许“并行版本控制”。 AFAIK 它不是为安全而设计的。

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

【讨论】:

  • 强命名程序集肯定有一个安全组件,请参阅What's the Difference, Part Five: certificate signing vs strong naming。基本上,它允许您确认程序集的身份。如果没有该恶意软件可以轻松替换受信任的程序集。此外,OP 必须使用一个完全受信任的程序集,而不仅仅是一个强命名的程序集来使用反射创建实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多