ilmerge with a PFX file

落爺英雄遲暮 提交于 2019-12-11 04:39:46

问题


It would appear that VS2012 uses PFX files for signing instead of SNK files. I get the impression this is related to delayed signing; but I don't care.

When I build my application, I can use "sn -tp <my assembly>" and see it is signed.

When I ilmerge the debug folder and use the /keyfile directive (the way I was successfully doing with SNK files), the DLLs merge into one unsigned DLL.

I have read articles suggesting clever workarounds, such as extracting the public key from the original DLL and then using this in the /keyfile directive...which also failed to allow me to create a strongly signed DLL.

So, what do I need to do to get ilmerge to work with the PFX file so that my assembly will be strongly typed?

Thanks


回答1:


I recently was attempting to do just the same thing (this time with VS 2015, but I am sure the results are the same).

PFX files are password-protected by default and ILMerge (at the time of this writing) does not appear to support them.

Manual Signing

The "clever workaround" as you describe it is presented here, and it appears to be the only way to accomplish this:

>sn -p some.pfx some.pub
>ilmerge /keyfile:some.pub /delaysign /out:merged\some.dll some.dll
>sn -R merged\some.dll some.pfx

Note that extracting the public key from the PFX file requires user input - allegedly it was previously possible to pipe in the password, but the current version of sn.exe does not permit console redirection.

Automated (CI Build System) Signing

In order to strong sign ILMerged assemblies in an automated way, it is necessary to install they key on the local build machine. This still requires user input in the form of password input, but only has to be done once per build machine.

As before, we need to extract the public key from the PFX file (this only has to be done once, and the PUB file can be saved alongside the PFX or even checked-in to source).

Here is the one-time setup code (both require password input):

>sn -p some.pfx some.pub
>sn -i some.pfx SomeContainerName

During the automated build, it is now possible to run:

>ilmerge /keyfile:some.pub /delaysign /out:merged\some.dll some.dll
>sn -Rc merged\some.dll SomeContainerName


来源:https://stackoverflow.com/questions/17459279/ilmerge-with-a-pfx-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!