C# 为什么要在集会上签名?
在我接管的一些C代码(在VisualStudio2005中)中,我注意到程序集都使用相同的C# 为什么要在集会上签名?,c#,assemblies,C#,Assemblies,在我接管的一些C代码(在VisualStudio2005中)中,我注意到程序集都使用相同的.snk文件签名 为什么前一位作者会以这种方式签署程序集 是否需要对程序集进行签名?什么 不签字会错吗 这方面有什么缺点 签名程序集-是否会导致延迟 如果要将程序集放入目录中,则需要对程序集进行签名 如果对可执行文件进行签名,那么它链接到的任何类库也需要进行签名。如果您使用的是第三方库(特别是如果您需要使用控件或类似控件),这可能会很困难 Richard Grimes在中编写了一篇关于安全性的优秀研讨会,
.snk
文件签名
- 为什么前一位作者会以这种方式签署程序集李>
- 是否需要对程序集进行签名?什么 不签字会错吗
- 这方面有什么缺点 签名程序集-是否会导致延迟
已签名程序集只能加载其他已签名程序集。此外,它们与特定的版本相关联,这意味着如果要使用不同的版本,则需要使用绑定重定向或重新编译应用程序。由于签名的验证,也会有一点性能开销,但这一开销太小,您不必担心。对程序集进行签名的一个非常重要的原因是,您可以确保它是您的程序集。由于私钥是您的,因此其他人无法使用该密钥对程序集进行签名。这意味着,当程序集的公钥是您知道的公钥时(您可以使用
GetType().assembly.GetName().GetPublicKey()
函数检索该公钥),该程序集是您的,并且未被篡改。尽管使用了签名dll的所有方法,但对dll进行签名的原因只有两个
1。版本控制
2。身份验证
a。版本控制表示dll构建的版本,当将它们推入GAC时,可以存在两个同名但版本不同的dll
b。身份验证表示dll是否未被篡改,并且在创建dll时是否存在
如果您想了解更多有关基本知识和dll签名的信息,除了现有答案外,您还可以参考,我想补充一点,当您的dll将被第三方软件动态加载和使用时,您必须使用签名。这本身不是技术要求,但第三方软件生产商出于安全考虑实施此类策略是合理的,因此非常常见 必须对程序集进行签名的示例:
- 开发Windows Shell/Windows资源管理器扩展,如:Windows资源管理器的上下文菜单扩展
- 开发VisualStudio扩展,如:项目/项目模板向导GUI
Ie:如果你复制那个文件夹并把它放到另一台电脑里,它就不工作了。因为它只是在那台机器上签名。请原谅我回答了一个老问题。但这里的大多数回答都暗示,强命名提供了安全性。但是微软建议不要为了安全而使用它 强名称签名的文档当前显示: ⚠ 警告 不要依赖强名称来保证安全性。它们只提供了一个独特的身份 它对于确保您拥有所需的二进制文件,而不是具有相同名称和版本(或通过绑定重定向设置的版本)的不同二进制文件非常有用 Microsoft列出了使用强命名的原因:
- 您想使您的程序集能够被强名称程序集引用,或者您想让朋友从其他强名称程序集访问您的程序集
- 应用程序需要访问同一程序集的不同版本。这意味着您需要在同一应用程序域中并行加载程序集的不同版本,而不会产生冲突。例如,如果具有相同简单名称的程序集中存在API的不同扩展,则强命名为程序集的每个版本提供唯一标识
- 您不希望对使用程序集的应用程序的性能产生负面影响,因此希望程序集与域无关。这需要强命名,因为必须在全局程序集缓存中安装与域无关的程序集
- 您希望通过应用发布者策略来集中应用程序的服务,这意味着程序集必须安装在全局程序集缓存中
如果您是一个开源开发人员,您希望得到一个强名称的程序集的身份好处,以便更好地与.NET框架兼容,请考虑签入与之关联的私钥。