C# .NET - .NET程序集 - 程序集签名和强名称
.NET强名称实用工具介绍
如果安装了Visual Studio 2022,那么可以打开Visual Studio 2022 Developer Command Prompt v17.4.0(也称为 Developer Command Prompt for VS 2022),然后输入sn.exe(或sn.exe -h)回车,就会显示强名称实用工具的信息:

上图只是显示部分信息,需要完整的信息可以动手试一下。

可以按照以下方式为程序集生成一个公钥/私钥对:
sn.exe -k HovertreeKeyPair.snk

生成的HovertreeKeyPair.snk就是公钥/私钥对文件
该文件可能在C:\Windows\SysWOW64 中。

也可以按照以下
sn.exe -k D:\HovertreeKeyPair.snk

那么生成的文件在D盘的根目录

接下来介绍如何开启Developer Command Prompt for VS 2022
1、可以在开始菜单中开启.打开开始菜单,在Visual Studio 2022文件夹下,点击“Developer Command Prompt for VS 2022”菜单。如下图:

2、在命令提示符中启动。
右键点击开始菜单,选择“运行”,在“运行”对话框中,输入cmd,回车,就可以打开“命令提示符”。
右键点击开始菜单,选择“命令提示符(管理员)”,也可以进入命令提示符。

进入命令提示符后,来到VsDevCmd.bat的目录,例如:D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools

然后输入VsDevCmd.bat 回车,就进入了Developer Command Prompt for VS 2022
如下图:


警告
不要依赖于通过强名称实现安全性。 它们仅提供唯一的标识。

为何强命名程序集?

对于 .NET Framework,强名称程序集在以下场景中有用:

你希望启用强名称程序集将引用的程序集,或希望允许其他强名称程序集 friend 访问你的程序集。

应用程序需要访问同一程序集的各种版本。 这意味着你需要在同一应用程序域中并排加载某程序集的不同版本,且各版本互不冲突。 例如,如果在具有相同简单名称的程序集中存在 API 的不同扩展,强命名将为该程序集的每个版本提供唯一标识。

你不希望程序集的使用对应用程序性能产生负面影响,所以你想要非特定于域的程序集。 这就要求进行强命名,因为非特定于域的程序集必须安装在全局程序集缓存中。

建议通过应用发布服务器策略来集中应用程序的服务,这意味着程序集必须安装在全局程序集缓存中。

对于 .NET Core 和 .NET 5 以上版本,强名称程序集不会带来实质性的好处。 运行时从不验证强名称签名,也不对程序集绑定使用强名称。

如果你是开放源代码开发人员且希望利用强命名程序集的标识优势以便与 .NET Framework 更好地兼容,请考虑签入与源代码管理系统内程序集相关联的私钥。
收藏 列表

评论:

导航