[.NET]

依据文档:

https://msdn.microsoft.com/en-us/library/hh415055(v=vs.110).aspx

虽然文档上给出了看似完整的步骤,但是如果按照上面的步骤,结果是失败的。而且文档的里的option还用错了。(-ac应该用-a, -ac是用于keypaircontainer)

以下是一个完整的强签名迁移的sample:

用于测试的代码,可以建一个console app,类似下面的例子:

using System;

using System.Reflection;

 

namespace CLR6

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.ReadLine("Hello world!");

        }

    }

}

按照Signing with SHA-2, with Key Migration的1~3步骤,生成

IdentityKey.snk,SignatureKey.snk,IdentityPubKey ,sha256的SignaturePubKey.snk。

然后用第四步的命令来获取AssemblySignatureKeyAttribute需要的两个参数,注意用-a而不是-ac:

sn -a IdentityPubKey.snk IdentityKey.snk SignaturePubKey.snk

生成的两个参数需要从控制台窗口拷贝到本地,可以存到text文件。

在需要重签名的程序文件添加assembly标签,通常是把它放在AssemblyInfo.cs文件中:

using System;

using System.Reflection;

 

[assembly: AssemblySignatureKeyAttribute("002400000c800000940000000602000000240000525341310004000001000100e3997384795973ec459c8ec80019bce59a2edb42dd069cc4f25037370f41e0d041eff3995d26ed28fa0610105ffee4c61992b64a79bfb3af07321eeea3c3c8b9b149efdd5c3ac2962e7ce0d416c5bb1637d438aeb09648f40db8d3d04081f554adf8ea1295b1344bfdde7ec48cae46bdd68f58aa00f4e37a289e55972446b9bc",

"8f29590c4f363e4c468f12c324f5d8ce76887a6bb246dd3237204a8f3232d1284c5a3a74405f235715527b7bd4ff73cd17ee242b863a335cb55c368f6ae8f769d6374fa9daa850d9aed6f19c989b44ffd56a0d8088629962d0e66bf942b3d21a11f54ef5f2800b404a4cc63dcf6380186366caea7c2a8ce25a433767ea2f828e")]

 

namespace CLR6

{

    class Program

    {

        static void Main(string[] args)

        {

        }

    }

}

然后运行延迟签名和fully sign命令。这样一个加强了的强命名程序集产生了,用ildasm看元数据的话, 很清楚的能看到AssemblySignatureKeyAttribute被编译器插入到程序集中了。

原文地址:https://www.cnblogs.com/fred-bao/p/4566887.html