我最近试图做同样的事情(这次是 VS 2015,但我相信结果是一样的)。
PFX 文件默认受密码保护,ILMerge(在撰写本文时)似乎不支持它们。
手动签名
您描述的“聪明的解决方法”在此处介绍,它似乎是实现此目的的唯一方法:
>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