使用PFX文件进行ilmerge

时间:2013-07-03 22:45:45

标签: visual-studio-2012 ilmerge pfx

VS2012似乎使用PFX文件进行签名而不是SNK文件。我觉得这与延迟签名有关;但我不在乎。

当我构建我的应用程序时,我可以使用“sn -tp< my assembly>”并看到它已签名。

当我使用/ keyfile指令(我使用SNK文件成功处理的方式)时,我将这些DLL合并到一个未签名的DLL中。

我读过一些文章,建议使用聪明的解决方法,例如从原始DLL中提取公钥然后在/ keyfile指令中使用它...这也无法允许我创建一个强签名的DLL。

那么,我需要做些什么才能让ilmerge使用PFX文件,这样我的程序集将被强类型化?

由于

1 个答案:

答案 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