ClickOnce 应用程序的强名称签名

强命名的强名称签名或,软件组件提供他人无法伪造的全局唯一标识。 强名称用于确保组件依赖项和配置语句恰好映射到正确的组件和组件版本。

强名称是由程序集的标识 (简单文本名称、版本号和区域性信息),再加上公钥标记和数字签名。

对于 Visual C# 和 Visual Basic 项目, Visual Studio 通过 签名 窗格启用强命名 项目设计器;请参见 “项目设计器”->“签名”页

对于 Visual C++ 项目,使用链接器选项对程序集签名;请参见 强名称程序集(程序集签名)(C++/CLI)

使用强命名的原因

强命名为一个应用程序或组件其他软件可以使用显式引用它的唯一标识。 例如,强命名使应用程序作者和管理员可以指定用于共享组件将使用的一种准确的服务的版本。 这使不同的应用程序指定不同的版本,而不会影响其他应用程序。 此外,还可以使用组件的强名称作为安全证据生成两个组件之间的信任关系。

h4fa028b.collapse_all(zh-cn,VS.110).gif可以强命名的内容

可以强名称 .NET framework 程序集,并且 XML 清单。 这些包括:

  • 应用程序程序集 (.exe)

  • 应用程序清单 (.exe.manifest)

  • 部署清单 (.application)

  • 共享组件程序集 (.dll)

h4fa028b.collapse_all(zh-cn,VS.110).gif应该强命名的内容

应该强命名共享 DLL。 无论 DLL 是否在全局程序集缓存中部署,建议使用强名称,当 DLL 不是应用程序的私有实现详细信息时,但是,是可由多个应用程序使用的泛型。

h4fa028b.collapse_all(zh-cn,VS.110).gif必须强命名的内容

必须强名称以下操作:

  • DLL,因此,如果要部署到全局程序集缓存 (GAC)中。

  • ClickOnce 应用程序和部署清单。 默认情况下, Visual Studio 项目系统启用此 ClickOnce的 - 部署的应用程序。

  • 主互操作程序集,用于 COM 互操作性使用。 ,在创建从 COM 类型库时,获取一个主互操作程序集 TLBIMP 实用工具强制执行强命名。

h4fa028b.collapse_all(zh-cn,VS.110).gif不应该强命名的内容

通常,应避免对应用程序 EXE 程序集。 强命名的应用程序或组件不能引用弱命名的组件。 因此,对 EXE 进行强命名会阻止 EXE 引用与应用程序一起部署的弱命名的 DLL。

因此, Visual Studio 项目系统不对应用程序 EXE 进行强命名 相反,它强名称应用程序清单,在内部指向弱命名的应用程序 EXE。

此外,您可能还希望避免强命名为私有应用程序的元素。 在这种情况下,强命名会更加难以管理依赖项并为私有组件的不必要的系统开销。

如何分配强名称

在 Visual Studio 中,使用 项目设计器签名 窗格的强名称应用程序或组件。 签名 窗格支持两个强命名方法:使用强名称密钥文件或使用密钥提供程序。 有关清单签名的信息,请参见 如何:对应用程序和部署清单进行签名;有关创建强名称密钥 (.snk) 文件的信息,请参见 如何:创建公钥/私钥对

当使用密钥文件方法时,您可以使用现有密钥文件或创建新的。 应始终保护您的密钥文件的密码防止他人使用它。

密钥提供程序或证书存储区提供保护您的强名称密钥另一种方法。 某些密钥提供程序使用智能卡作为工具来验证标识并防止密钥被盗。

更新强名称组件

一个强名称组件不能通过复制旧一个新的版本为服务或升级。

可以通过复制新版本更新应用程序目录的弱命名的 DLL 添加到应用程序目录中。 公共语言运行 (CLR)时将加载任何版本确实存在。

强名称 DLL,必须要么重新编译整个应用程序,使所有程序集引用指向新版本,或者必须更新应用程序的 .config 文件指示运行时加载新版本而不是旧一个。

尽管强名称组件需要更多维护,这个优点是应用程序非常明确的其他组件的版本它们需要在运行时。

请参见

任务

如何:对应用程序和部署清单进行签名

如何:对程序集进行签名 (Visual Studio)

参考

“项目设计器”->“签名”页

概念

保护 ClickOnce 应用程序

具有强名称的程序集

强名称程序集(程序集签名)(C++/CLI)

其他资源

管理程序集签名和清单签名