使用sn.exe为程序集签名

前言

在写上一篇随笔时,为理解EF事务底层的原理,我去Github上把EF的源码下载放到自己项目调试,不过在编译时遇到了下面这个报错信息。经过一番查阅,了解到了程序集签名(也称强名称签名)的概念。报错信息正是dll缺少签名,需要重新签名,这里记录一下我当时的操作。

错误 CS7032 Key file 'EcmaPublicKey.snk' is missing the private key needed for signing EntityFramework CSC 1 

 

对程序集签名

1、创建公钥/秘钥对

首先我们需要通过VS Tools的“开发人员命令提示”来运行签名工具sn.exe,输入命令:sn -k 文件名.snk,生成密钥对。

2、为类库项目选择密钥文件

选中类库→右键→属性→签名→勾选“为程序集签名”→选择刚才生成的密钥文件。(刚才的密钥文件就生成在D盘的VS文件夹下哦)

3、编译类库,获取公钥

获取重新编译生成的程序集DLL文件,复制到路径C:\以便敲打命令时省掉一大串的路径。在刚才的“开发人员命令提示”中输入sn -T C:\程序集名称.dll ,注意这里 T 一定要大写。到这里就可以拿到公钥了。

4、在解决方案的xx.config文件中写入公钥

在config配置文件中找到刚才程序集相应节点的publicKeyToken属性,将获取到的公钥写入。到此,对程序集的签名工作就完成了。签名工具sn.exe的其他命令请看在这里

 

参考引用

具有强名称的程序集:https://docs.microsoft.com/zh-cn/dotnet/framework/app-domains/strong-named-assemblies

如何创建公钥/私钥对:https://docs.microsoft.com/zh-cn/dotnet/framework/app-domains/how-to-create-a-public-private-key-pair

Sn.exe(强名称工具):https://docs.microsoft.com/zh-cn/dotnet/framework/tools/sn-exe-strong-name-tool

 

posted @ 2018-05-30 20:41  雄介  阅读(565)  评论(0编辑  收藏  举报