如何使用强名称签署.NET程序集DLL文件?

问题描述:

我有一个没有名字的程序集。我没有它的源代码。如何使用强名称签署.NET程序集DLL文件?

我现在需要它来签名。有没有办法做到这一点?

使用强名称工具实用程序(sn.exe)。

+0

SN.EXE不能做到这一点,becacuse SN.EXE正好可以辞职storng名称程序集 – guaike 2009-08-03 03:28:46

+0

我认为如果原始程序集标记为稍后签名,sn.exe可以工作。是? – Cheeso 2009-08-03 04:46:54

+2

给Cheeso:是的,你说得对,我找到了一个方法:http://ryanfarley.com/blog/archive/2010/04/23/sign-a-.net-assembly-with-a-strong-name- without-recompiling.aspx – guaike 2010-04-26 03:31:19

如果原始程序集标记为延迟签名,则可以使用sn.exe工具。

如果原始程序集没有如此标记,则可以使用ildasm.exe对其进行反汇编,然后使用ilasm.exe重新进行分析并指定/键参数。参考文献:[1][2]

例子:

> ildasm /all /out=MYASSEMBLY.il MYASSEMBLY.dll 
> ilasm /dll /key=key.snk MYASSEMBLY.il 
+0

http://msdn.microsoft.com/en-us/library/xc31ft41(VS.71).aspx MSDN表示使用:al /out:MyAssembly.dll MyModule.netmodule/keyfile:sgKey。 snk。但我没有成功 – guaike 2009-08-03 06:30:48

You can sign the assembly with the help of VS command prompt. 
Just type the path in VS cmd prompt where your project is physically present. 

In VS cmd 
<your project path>sn -k <name of your project>.snk 

Then go to your project in Solution Explorer -> properties -> Signing -> check checkbox 
-> Browse to the key which is created using VS cmd. 

简单的方法来签署第三方组件使用的Assembly Strong Name SignerGUI版本,请访问:http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer

它的源代码在Github上可用。肮脏的工作使用Mono.Cecil。也可用作command line工具。

我找到了推荐的ildasmilasm往返建议在几个地方繁琐,更好的避免。

我不知道Assembly Strong Name Signer如何处理多装配的依赖关系。如果没有,问题和解决方案在此处描述(发布,2008年):http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/

看看我的StrongNameResigner。它可以签署或辞职的装配和依赖于它同时还采用了这样的一个命令更新所有引用的所有程序集:

StrongNameResigner.exe -a "c:\temp" -k "key.snk" Foo.Bar