3

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

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

当我合并调试文件夹并使用 /keyfile 指令(我成功处理 SNK 文件的方式)时,DLL 合并为一个未签名的 DLL。

我已经阅读了一些建议巧妙解决方法的文章,例如从原始 DLL 中提取公钥,然后在 /keyfile 指令中使用它……这也无法让我创建一个强签名的 DLL。

那么,我需要做些什么才能让 ilmerge 使用 PFX 文件,以便我的程序集是强类型的?

谢谢

4

1 回答 1

2

我最近试图做同样的事情(这次是 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
于 2015-11-25T14:15:06.767 回答