VS2012似乎使用PFX文件进行签名而不是SNK文件。我觉得这与延迟签名有关;但我不在乎。
当我构建我的应用程序时,我可以使用“sn -tp< my assembly>”并看到它已签名。
当我使用/ keyfile指令(我使用SNK文件成功处理的方式)时,我将这些DLL合并到一个未签名的DLL中。
我读过一些文章,建议使用聪明的解决方法,例如从原始DLL中提取公钥然后在/ keyfile指令中使用它...这也无法允许我创建一个强签名的DLL。
那么,我需要做些什么才能让ilmerge使用PFX文件,这样我的程序集将被强类型化?
由于
答案 0 :(得分:1)
我最近试图做同样的事情(这次是VS 2015,但我确信结果是一样的。)
默认情况下,PFX文件受密码保护,ILMerge(在撰写本文时)似乎不支持它们。
手动签名
"聪明的解决方法"正如你所描述的is presented here,它似乎是实现这一目标的唯一方法:
>sn -p some.pfx some.pub
>ilmerge /keyfile:some.pub /delaysign /out:merged\some.dll some.dll
>sn -R merged\some.dll some.pfx
请注意,从PFX文件中提取公钥需要用户输入 - 据称之前可以输入密码,但当前版本的sn.exe
不允许控制台重定向。
自动(CI构建系统)签名
为了以自动方式对ILMerged程序集进行强签名,必须在本地构建计算机上安装它们。这仍然需要以密码输入的形式输入用户,但每个构建机器只需要进行一次。
和以前一样,我们需要从PFX文件中提取公钥(这只需要完成一次,PUB文件可以与PFX一起保存,甚至可以签入源代码。)
这是一次性设置代码(都需要密码输入):
>sn -p some.pfx some.pub
>sn -i some.pfx SomeContainerName
在自动构建期间,现在可以运行:
>ilmerge /keyfile:some.pub /delaysign /out:merged\some.dll some.dll
>sn -Rc merged\some.dll SomeContainerName