【问题标题】:What to consider when strong name signing a managed application?强名称签署托管应用程序时要考虑什么?
【发布时间】:2009-11-19 07:59:49
【问题描述】:

我想强命名一个托管应用程序,它通过互操作引用许多托管程序集以及 ActiveX 和 COM 组件(用 C++ 编写)。而且因为强命名程序集不能引用弱命名程序集,请您告诉我应该为哪些问题做好准备,您遇到了什么问题,尤其是在处理那些 ActiveX 和 COM 互操作时?

这个应用程序的解决方案很大。它由 50 多个托管 C#、Vb.net、本机 C++ 和托管 C++/CLI 项目组成。因此,您提供的信息和真实生活故事越多,我就越能做好准备,让自己免于头痛。

谢谢。

【问题讨论】:

    标签: .net visual-studio strongname snk


    【解决方案1】:

    我还没有真正体验过这种视觉工作室解决方案。但我希望herehere 的信息可以为您的互操作组件提供一些想法。

    【讨论】:

      【解决方案2】:

      除了可靠地存储 .snk 文件之外,真的没有什么问题。

      请记住,将使用您的程序集的每个第三方程序集都将具有依赖项中提到的程序集的密钥,并且每次加载程序集时,它都会检查加载的程序集是否仍使用该密钥进行签名。这样做是为了防止某些恶意代码错误地放置您的程序集。

      这意味着除非您可靠地存储用于签署程序集的早期版本的 .snk 文件,否则您将无法在不强制用户重新添加引用的情况下发布新版本。因此,存储 .snk 文件并为任何给定程序集的每个版本使用相同的文件。是为不同的程序集使用不同的 .snk 文件还是为所有程序集使用一个文件并不重要,因此每个公司一个 .snk 就足够了。

      有关上述内容的详细信息,请参阅this questionthis perfect answer

      【讨论】:

      • 这就是我想要强命名应用程序的原因。但是,我想知道应用程序的架构和我们的大 VS 解决方案的结构隐藏的复杂性。谢谢。
      【解决方案3】:

      到目前为止,我还没有遇到任何与强名称相关的问题(也使用 COM 互操作程序集)。如果您获得没有强名称的 3rd 方程序集,您可以自己对其进行后签名,从而使所有程序集都具有强名称。

      当然,使互操作程序集强命名不会保护要修改或替换的底层 COM DLL,因此强名称的“保护”并不会真正扩展到 COM 组件,即使互操作程序集是强命名的。

      【讨论】:

      • 您是否使用 tlbimp.exe 或 aximp.exe 对互操作程序集进行签名并引用它们?我问的原因是因为我们的一个项目使用 VS 引用 COM 组件并免费生成互操作程序集。谢谢。
      • 我过去曾使用过 TlbImp 和 ILMerge 后签名程序集。我不喜欢 VS 完成的自动 SNK 处理,因为它需要密钥文件物理存在于计算机上。在我们的环境中,我们将密钥存储在密钥容器中,因此不需要任何人拥有密钥的多个副本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 2013-07-20
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多