程序集的强命名为程序集创建唯一标识,并可能防止程序集冲突。
如何创建强名称程序集?
强名称程序集通过使用私钥以及程序集本身生成,此私钥对应于与该程序集一起分发的公钥。 该程序集包括程序集清单,其中包含构成程序集的所有文件的名称和哈希。 具有相同强名称的程序集应该完全相同。
可以通过 Visual Studio 或命令行工具来强命名程序集。 有关详细信息,请参阅 “如何:使用强名称 或 Sn.exe(强名称工具)对程序集进行签名。
在创建强名称程序集时,它包含程序集的简单文本名称、版本号、可选区域性信息、数字签名,以及对应于用于签名的私钥的公钥。
警告
不要依赖于通过强名称实现安全性。 它们仅提供唯一标识。
为何强命名程序集?
对于 .NET Framework,强命名程序集在以下方案中非常有用:
你希望让你的程序集被强命名程序集引用,或者希望授予其他强命名程序集对
friend
的访问权限。应用需要访问同一程序集的不同版本。 这意味着需要不同版本的程序集才能在同一应用域中并行加载,而不会发生冲突。 例如,如果 API 的不同扩展存在于具有相同简单名称的程序集中,则强命名将为程序集的每个版本提供唯一标识。
你不希望对使用程序集的应用的性能产生负面影响,因此你希望程序集是非域性的。 这需要强命名,因为必须在全局程序集缓存中安装非特定域程序集。
你希望通过应用发布者策略来集中为应用提供服务,这意味着程序集必须安装在全局程序集缓存中。
对于 .NET Core 和 .NET 5 以上版本,强名称程序集不会带来实质性的好处。 运行时永远不会验证强名称签名,也不会使用强名称进行程序集绑定。
如果您是开源开发人员,并希望通过使用强名称程序集来提升与 .NET Framework 的兼容性,建议将与程序集关联的私钥提交到您的源代码管理系统。