【问题标题】:Why has an InternalsVisibleTo referenced assembly also be signed?为什么还要对 InternalsVisibleTo 引用的程序集进行签名?
【发布时间】:2017-10-23 06:01:31
【问题描述】:

我有一个强命名的 c# 程序集:Strong.Named.Assembly.dll。它具有属性InternalsVisibleTo 及其公钥,用于另一个程序集:[assembly: InternalsVisibleTo("Another.Assembly, PublicKey=xxx")]Anoter.Assembly 尚未签名。所以我无法引用Strong.Named.Assembly 中的类,直到我也唱了Another.Assembly

为什么不能将强命名程序集的内部显示给未签名的程序集?

【问题讨论】:

  • 我将标签“assembly”更改为“.net-assembly”,因为标签“assembly”是关于汇编语言的......
  • 当任何人都可以使用“允许的”AssemblyNames 之一来获得访问权限时,对程序集施加这种限制没有多大意义。 PublicKey 确保它确实是您想要的。
  • 你为什么需要它?
  • 我不需要它。我遇到了它,因为默认情况下项目没有强名称。我只是想知道这种行为的原因。
  • 只有开发人员知道这一点,但我想是出于安全原因。签名的程序集被视为更“安全”,如果任何未签名的程序集可以使用其内部类型(通过使用正确的名称) - 有点违反了这一点。出于同样的原因,您不能从已签名的程序集中引用未签名的程序集。

标签: c# .net .net-assembly internalsvisibleto


【解决方案1】:

查看 MSDN InternalsVisibleToAttribute Class。文档明确指出“当前程序集和友元程序集都必须是未签名的,或者两个程序集都必须使用强名称进行签名。”

我认为原因很明显。它保证您授予内部访问权限的程序集在将来发生更改时不会攻击您的实现。

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多