强名称签名赋予软件组件一种全球唯一的身份。 强名称用于保证程序集不能被其他人欺骗,并确保组件依赖项和配置语句映射到正确的组件和组件版本。
强名称由程序集的标识(简单文本名称、版本号和文化信息)、公钥令牌以及数字签名组成。
有关在 Visual Basic 和 C# 项目中对程序集进行签名的信息,请参阅 “创建和使用强名称程序集”。
有关C++项目中对程序集进行签名的信息,请参阅强名称程序集(C++/CLI)。
注释
强名称签名不保护程序集免受反向工程。 若要防止反向工程,请参阅 Dotfuscator Community。
资产类型和签名
可以对 .NET 程序集和应用程序清单进行签名:
可执行文件(.exe)
应用程序清单(.exe.manifest)
部署清单 (.application)
共享组件程序集(.dll)
对以下类型的资产进行签名:
如果要将程序集部署到全局程序集缓存(GAC)。
ClickOnce 应用程序和部署清单。 默认情况下,Visual Studio 将为这些应用程序启用签名。
用于 COM 互作性的主要互作程序集。 从 COM 类型库创建主互作程序集时,TLBIMP 实用工具强制实施强命名。
通常,不应对可执行文件进行签名。 强命名组件不能引用随应用程序一起部署的非强名称组件。 Visual Studio 不会对应用程序可执行文件进行签名,而是对应用程序清单进行签名,该清单指向弱命名的可执行文件。 避免对应用程序专用的组件进行签名,因为签名会使管理依赖项变得更加困难。
如何在 Visual Studio 中对程序集进行签名
对程序集进行签名的过程取决于项目使用的项目设计器版本。
对于 Visual Studio 2022 中的 .NET Core (和 .NET 5 及更高版本)C# 项目:
- 打开项目属性窗口(右键单击 解决方案资源管理器 中的项目节点并选择 “属性”)。
- 在 “生成”下,查找 “强命名”,然后选择“ 对程序集进行签名 ”复选框。 选中此框时会显示密钥文件的其他选项和延迟签名。
- 指定密钥文件。
如果没有密钥文件,可以使用命令行 创建 .snk
文件。 还可以使用.pfx
过程在文件中使用或生成证书,在“签名清单”步骤中,可以创建一个测试证书,以便在开发和测试期间使用,或者用于生产,使用 IT 部门或授权源颁发的证书。 请参阅 使用 ClickOnce 部署 .NET Windows 桌面应用。
对于 Visual Studio 2022 或 Visual Studio 2019 中的 .NET Framework 和 Visual Basic 项目:
- 打开项目属性窗口的 “签名 ”选项卡(右键单击 解决方案资源管理器 中的项目节点并选择 “属性”)。 选择“签名”选项卡。
- 选中“ 对程序集进行签名 ”复选框。
- 指定密钥文件。 如果选择创建新的密钥文件,则始终以 .pfx 格式创建新密钥文件。 需要新文件的名称和密码。
警告
应始终使用密码保护密钥文件,以防止其他人使用它。 还可以使用提供程序或证书存储来保护密钥。
还可以指向已创建的密钥。 有关创建密钥的详细信息,请参阅 创建公钥-私钥对。
如果仅有权访问公钥,则可以使用延迟签名来延迟分配密钥。 选中 “仅延迟签名 ”复选框即可启用延迟签名。 延迟签名的项目未运行,并且无法对其进行调试。 但是,可以使用具有选项的 Sn.exe 强名称工具-Vr
在开发过程中跳过验证。