"strong name" 在 .net 中的用法

Usage of "strong name" in .net

在 .net 中,我们为程序集指定了强名称。这个的实际用途是什么?这在内部如何使用?如果可能请解释场景

避免强命名(如果可以的话)!强大的命名是一个彻底的痛苦。

一旦您对程序集进行强命名,它引用的所有内容也必须被强命名。在一个简单的应用程序中,没什么大不了的。如果您必须处理 COM 互操作库等、其他项目等,那么问题将成为维护噩梦。

This 值得一读。

来自link:强命名程序集有很多优点:

  1. 信任。由于涉及 public 密钥加密,程序集的用户可以相信它来自签名者,例如 Red Gate Software。
  2. 防篡改。程序集的用户可以相信,自签名者发布以来,没有人对其进行过篡改。 .NET 运行时不会加载签名哈希与其当前哈希不匹配的程序集。
  3. 与 GAC 的兼容性。全局应用程序缓存只接受强命名程序集。

它也有缺点:

  1. “const 问题”,或“一个命名策略来统治它们”。强命名的程序集不能使用非强命名的程序集。就像病毒一样,强命名必须在整个应用程序中传播,否则就会灭亡。这会导致难以与开源或其他未签名的第三方组件进行交互。
  2. 版本耦合。由于程序集的强名称包括其版本,因此 .NET 框架通常要求,如果程序集 A 使用程序集 B,则在运行时 linked 所针对的程序集 B 的确切版本必须可用。
  3. 与 GAC 的兼容性。全局应用程序缓存只接受强命名程序集。

我过去在处理强命名程序集时并没有太多乐趣,尤其是那些为共享应用程序公开接口的程序集。您最终不得不围绕强命名程序集进行工程设计(例如使用 publisher policy