【问题标题】:Reflection and strong named assemblies反射和强命名程序集
【发布时间】:2010-12-03 04:59:35
【问题描述】:
  1. 我创建了一个测试项目,其输出将是强命名程序集。我已经在“项目 -> 属性 -> 签名”部分指定了 SNK 文件名,以便程序集具有强命名。 我添加了未签名或强命名的程序集的引用。我期待我的项目根本不会构建,因为它引用了未签名的程序集。但是,它构建了,我也可以在 GAC 中安装程序集!为什么会这样? (我使用的是 .NET 4.0,它是 gacutil.exe) 注意:我已确保被引用的程序集不是强命名的。

  2. 我可以在我的程序中以编程方式加载“无符号”(即非强命名)程序集,其输出将是强命名程序集吗?如果是,为什么允许这样做,而另一方面,.NET 不允许添加对未签名程序集的引用?

  3. 如果我在 GAC 中有同一个程序集的多个版本。在我的配置文件中,如果我只指定程序集的名称,将从 GAC 加载哪个版本?每次都是最新版本吗?哪个 API 有用?我在Assembly 类中发现了许多标记为“已弃用”的方法。

【问题讨论】:

    标签: c# .net system.reflection


    【解决方案1】:

    您可以在 VS.Net 中从已签名程序集引用未签名程序集。但是如果你调用任何从签名到未签名的东西,构建就会失败。

    【讨论】:

      【解决方案2】:
      1. 签名程序集引用未签名程序集没有问题。它可以完成,并且可以 GACed 签名程序集。

      2. 是的,您可以加载。

      3. 如何仅通过名称指定程序集?只有一个 API LoadWithPartialName 并且由于多种原因已被弃用。您需要版本、文化和公钥令牌来唯一标识程序集。

      【讨论】:

      • 感谢您的回复。但是如果你关注msdn.microsoft.com/en-us/library/wd40t7ad.aspx链接,甚至MSDN都说“强名称程序集只能引用其他强名称程序集。”。所以我仍然对第 1 点感到困惑。如果您对问题 2 的回答是“是”,那么您能否回答我的问题,为什么允许这样做(考虑我指定的链接上的文章)?再次感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多