2013-07-03 49 views
2

看來VS2012使用PFX文件進行簽名而不是SNK文件。我得到的印象是這涉及延遲簽名;但我不在乎。帶PFX文件的ilmerge

當我構建我的應用程序時,我可以使用「sn -tp <我的程序集>」並查看它已簽名。

當我ilmerge調試文件夾並使用/ keyfile指令(我成功地用SNK文件的方式),DLL合併成一個無符號的DLL。

我已經閱讀了文章,提出了一些聰明的解決方法,比如從原始DLL中提取公鑰,然後在/ keyfile指令中使用這個...也無法創建強簽名DLL。

那麼,我需要做些什麼來讓ilmerge與PFX文件一起工作,以便我的程序集將被強制輸入?

感謝

回答

1

我最近正在試圖做一樣的事情(這一次與2015年VS,但我可以肯定的結果是相同的)。

默認情況下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