强命名程序集的编译

没有*.snk文件的话自行百度如何生成*.snk文件,以下针对有snk文件的情况说明:

1.通过密钥文件*.snk生成公钥文件(生成的公钥文件可以查看公钥hash值,还有publickeytoken)

sn -p  路径\密钥.snk  路径\公钥.snk

2.查看公钥hash值和publickeytoken

sn -tp 路径\公钥.snk

3.用私钥文件签名程序集,得到强命名程序集:

vs中项目属性,签名->为程序集签名->选择私钥文件,编译即可。

编译的时候可能提示“友元程序集需要提供internal.....”,需要在AssemblyInfo.cs文件中把公钥hash值填进去,类似这样:

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(AssemblyRef.AssemblyPrefix + ".Win.UltraWinGanttView.v" + Infragistics.Shared.AssemblyVersion.MajorMinor + " , PublicKey = 0024000004800000940000000602000000240000525341310004000001000100df148327e2b6b827ba012a387bc777cc0fb6ebf0d0f07b85552af78402fb131aa8ba9183f8377e80e57531bf5225dd94bbef17921b4336351b3df8496fd2963af68ec7f6b30320125356323bbceb8599d20ac59fa6346dec768ac08e62e3ef4052112ddc5921365313cb9f67dff6088f819c0a14088f34fc19df17ef5e13deec")]

备注:经过签名的强命名程序集,使用反编译工具(reflector或者ilspy),可以看到publickeytoken值,如果是非强命名程序集,可以看到这个值是空的。

强命名程序集是可以反编译的,起不到保护代码的作用,其实,它的作用是保证dll的版本不被恶意程序随意替换,如果注册到GAC中,可以防止dll hell的问题。

如何注册到GAC可以自行百度。

你可能感兴趣的:(强命名程序集的编译)