如何:使用强名称为程序集签名

可通过许多方法为程序集签署强名称:

  • 在 Visual Studio 中,通过使用项目的“属性”对话框中的“签名”选项卡。这是为程序集签署强名称的最简单且最方便的方法。
  • 通过使用程序集链接器 (Al.exe) 将 .NET Framework 代码模块(.netmodule 文件)与密钥文件链接。
  • 通过使用程序集特性将强名称信息插入代码中。你可以使用 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 特性,具体取决于要使用的密钥文件所在的位置。
  • 通过使用编译器选项。

要使用强名称为程序集签名,必须具有加密密钥对。有关创建密钥对的详细信息,请参阅如何:创建公钥/私钥对

使用 Visual Studio 创建程序集并为程序集签署强名称

  1. “解决方案资源管理器”中,打开解决方案的快捷菜单,然后选择“属性”
  2. 选择“签名”选项卡。
  3. 选择“为程序集签名”框。
  4. “选择强名称密钥文件”框中,选择“<浏览…>”,然后导航到该密钥文件。若要创建新的密钥文件,请选择“<新建…>”,然后在“创建强名称密钥”对话框中输入其名称。

使用程序集链接器创建程序集并为程序集签署强名称

  • 在 Visual Studio 命令提示符处,键入以下命令:

    al /out:<assemblyName<moduleName> /keyfile:<keyfileName>

    其中:

    assemblyName

    程序集链接器将发出的强签名的程序集的名称(.dll 或 .exe 文件)。

    moduleName

    包含一个或多个类型的 .NET Framework 代码模块的名称(.netmodule 文件)。可以通过在 C# 或 Visual Basic 中使用/target:module 开关编译代码来创建 .netmodule 文件。

    keyfileName

    包含密钥对的容器或文件的名称。程序集链接器解释与当前目录相关的相对路径。

下面的示例使用密钥文件 sgKey.snk 为程序集 MyAssembly.dll 签署强名称。

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

有关此工具的详细信息,请参阅程序集链接器

使用特性为程序集签署强名称

  1. 将 System.Reflection.AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 特性添加到源代码文件中,并指定包含为程序集签署强名称时要使用的密钥对的文件或容器的名称。
  2. 通常会编译源代码文件。
注意

当 C# 和 Visual Basic 编译器在源代码中遇到 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute 特性时,会发出编译器警告(分别为 CS1699 和 BC41008)。你可以忽略这些警告。

下面的代码示例将 AssemblyKeyFileAttribute 特性用于名为 keyfile.snk 的密钥文件(位于编译程序集的目录中)。

C#

C++

VB

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]

在编译源文件时,也可以延迟为程序集签名。有关更多信息,请参见延迟为程序集签名

使用编译器为程序集签署强名称

  • 使用 C# 和 Visual Basic 中的 /keyfile 或 /delaysign 编译器选项,或使用 C++ 中的 /KEYFILE 或 /DELAYSIGN 链接器选项编译源代码文件。在选项名称后,添加冒号和密钥文件的名称。使用命令行编译器时,你可以将密钥文件复制到包含源代码文件的目录中。

    有关延迟签名的信息,请参阅延迟为程序集签名

    下面的示例使用 C# 编译器并借助密钥文件 sgKey.snk 为程序集 UtilityLibrary.dll 签署强名称。

    csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk
    

请参阅

创建和使用具有强名称的程序集
如何:创建公钥/私钥对
Al.exe(程序集链接器)
延迟为程序集签名
管理程序集签名和清单签名
“项目设计器”->“签名”页

时间: 2024-08-29 12:44:21

如何:使用强名称为程序集签名的相关文章

程序集签名

先利用SN.exe这个工具生成一个密匙文件aspnetpager.snk,这个文件的英文原文叫string name key file,然后用加密的算法根据aspnetpager.snk生成一个aspnetpagerPublic.snk.最后在根据 aspnetpagerPublic.snk提取一个public key token ,public key token是一个16位的数字和字母混合的数:大致流程如下: aspnetpager.snk --根据一定的算法--> aspnetpagerP

C#程序集系列09,程序集签名

在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够.本篇体验程序集的签名. □ 程序集的签名 →F盘as文件夹下有多个文件→在程序集所在文件夹创建密匙→打印密匙密匙是一堆乱码,这是经过加密了.→在密匙的基础上创建公匙Public Key→打印公匙Public Key注意:这里的public token是public key经过哈希算法而获得的.当程序集被引用,该程序集对外是以public token形式存在的. →现在重新编译&quo

.Net 程序集 签名工具sn.exe 密钥对SNK文件

.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法 (本文是从别人那里转来的,感觉说得很好就留了.感谢原作者!) .Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法 阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我再说说它是什么: 1.起个大名字 sn是strong name的缩写,正如其名,sn.exe的

对程序集“”签名时加密失败 --“对程序集签名时出错 - 拒绝访问。

选在强名称签名,编译程序集时出 [签名时加密失败 --“拒绝访问. ”]错误提示? 解决方法: 1.到”C:\ProgramData\Microsoft\Crypto\RSA”目录下面,选中:[MachineKeys]文件夹. 2.右键[MachineKeys]文件夹,在安全属性里面,将当前windows用户的权限加上. 3.回到vs.net 中,重新生成,问题解决.

.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法

阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我再说说它是什么: 1.起个大名字 sn是strong name的缩写,正如其名,sn.exe的目的是给程序集起一个唯一的名字(Hash+name+version+culture),即签名,保证不会让两个不同的DLL重名(就跟身份证不能重一样) 2.让调用者识别被调用的DLL是否被篡改 这一点是我重点

如何:创建公钥/私钥对

要使用强名称为程序集签名,必须具有公钥/私钥对.  这一对加密公钥和加密私钥用于在编译过程中创建强名称程序集.  您可以使用强名称工具 (Sn.exe) 来创建密钥对.  密钥对文件通常具有 .snk 扩展名. 注意 在 Visual Studio 中,C# 和 Visual Basic 项目属性页包括一个“签名”选项卡,通过该选项卡,您无需使用 Sn.exe 即可选择现有密钥文件或生成新密钥文件.  在 Visual C++ 中,可以在“属性页”窗口的“配置属性”部分的“链接器”部分中,在“高

C#反射与特性(一):反射基础

目录 C#反射与特性(一):反射基础 1. 说明 1.1 关于反射.特性 2. 程序集操作 2.1 获取 程序集对象(Assembly) 2.2 Assembly 使用 2.3 获取程序集的方式 C#反射与特性(一):反射基础 1. 说明 1.1 关于反射.特性 在 <C# 7.0 本质论>中,关于这方面的知识在 <第十八章 反射.特性和动态编程>:在<C# 7.0 核心技术指南>中,这部分内容在<第19章 反射和元数据>. [图片来自 <C# 7.0

.net程序集强名称签名实践

引用:  http://www.cnblogs.com/cpcpc/archive/2011/01/17/2123086.html 强名称是由程序集的标识加上公钥和数字签名组成的.其中,程序集的标识包括简单文本名称.版本号和区域性信息(如果提供的话).强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的.Microsoft? Visual Studio? .NET 和在 .NET Framework SDK 中提供的其他开发工具能够

未能加载文件或程序集“Enyim.Caching”或它的某一个依赖项。未能验证强名称签名

from:http://www.mzwu.com/article.asp?id=3741 itHub下载Enyim项目,编译后引用程序运行出错: 引用内容 未能加载文件或程序集“Enyim.Caching, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cec98615db04012e”或它的某一个依赖项.强名称验证失败. 既然是强名称的原因,不给程序集签名就好了.打开Enyim.Caching项目属性,不勾选为程序集签名: 编译引用,问题依旧