前言
在写上一篇随笔时,为理解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
Sn.exe(强名称工具):https://docs.microsoft.com/zh-cn/dotnet/framework/tools/sn-exe-strong-name-tool