依据文档:

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被编译器插入到程序集中了。

[.NET] - Enhanced Strong Naming (加强版的强签名程序集) – 如何迁移原有的强命名程序集的更多相关文章

  1. 使用InternalsVisibleToAttribute给assembly添加“友元assembly”特性遭遇"强签名"

    一.如何让Intenal成员暴露给另一个程序集 我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集.比较典型的应用场景包括 ...

  2. 从编译DotNetOpenAuth中学到的程序集强签名知识

    1. 背景 最近在研究DotNetOpenAuth——OAuth的一个.NET开源实现,官方网站:http://dotnetopenauth.net/ . 从GitHub签出DotNetOpenAut ...

  3. NET 强签名

    强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名 ...

  4. dll强签名的由来和作用

    C# dll强签名介绍 之前基本没有这个概念,直到有一天我们的dll被反编译了,导致我们的代码基本上被看到了,才想起来要保护dll的安全性,因为C#语言的在编译过程中会产生中间语言导致dll很容易被反 ...

  5. .NET:强签名程序集的加载问题 之 版本重定向

    背景 多数解决方案会包含多个项目,某些支持插件架构的解决方案中,更是包含多个插件项目,这些项目会使用一些第三方NuGet Packages,如果管理不慎,解决方案中会出现多个版本的引用,这在编译期间不 ...

  6. C# 给主程序签名及第三方dll强签名操作

    1.给主程序添加签名   添加完成后会自动生成一个*.pfx文件.     2.给第三方程序添加强签名方法:   本文以WAPIWrapperCSharp.dll为例,使用vs Tools下的工具命令 ...

  7. .Net程序集强签名详解

    强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名 ...

  8. VS报:"dll标记为系统必备组件,必须对其进行强签名"错误

    问题: VS生成程序时,报“要将程序集“XX.dll”标记为系统必备组件,必须对其进行强签名.”错误. 解决方法: 1)在报错的解决方案中找到一个可以发布的项目(引用该XX.dll的项目未必可以发布) ...

  9. 给主程序签名及第三方dll强签名

    给主程序添加签名   添加完成后会自动生成一个*.pfx文件.     给程序添加强签名方法:   本文以Quartz.dll为例,使用vs Tools下的工具命令.   打开命令工具是这个样子,   ...

随机推荐

  1. Vue—新版本router-view 与 keep-alive 的互动

    1. <keep-alive> 直接嵌套到 <router-view> 上会失效,正确写法: <router-view #="{ Component }&quo ...

  2. Codeforces Round #672 (Div. 2) B. Rock and Lever题解(思维+位运算)

    题目链接 题目大意 给你一个长为n(n<=1e5)的数组,让你求有多少对a[i]和a[j] (i!=j)满足a[i]&a[j]>a[i]^a[j] 题目思路 这些有关位运算的题目肯 ...

  3. Kafka入门之broker-消息设计

    消息设计 1.消息格式 Kafka的实现方式本质上是使用java NIO的ByteBuffer来保存消息,同时依赖文件系统提供的页缓存机制,而非依靠java的堆缓存. 2.版本变迁 0.11.0.0版 ...

  4. Apache Beam,批处理和流式处理的融合!

    1. 概述 在本教程中,我们将介绍 Apache Beam 并探讨其基本概念. 我们将首先演示使用 Apache Beam 的用例和好处,然后介绍基本概念和术语.之后,我们将通过一个简单的例子来说明 ...

  5. Python函数中的位置参数

    函数的参数在调用时传递数据时,默认是按参数的位置顺序传值,即形参的顺序与实参的顺序逐一对应,这种参数的使用模式称为位置参数.位置参数是最常用的一种参数使用形式. 使用位置参数传递实参的情况下,要求有缺 ...

  6. instanceof constructor Object.prototype.tostring.call ( [] )区别 数组和 对象的3中方法

  7. 【面试】java什么时候要用static

    static关键字是在我们编写代码和阅读代码时碰到的常见的一个关键字,在学习java基础时就学过了,这也是各大公司的面试官喜欢在面试时问到的知识点之一.虽然大概知道是什么,但完整的表达出来还是有点难度 ...

  8. Scrum冲刺_Day02

    一.团队展示: 1.项目:light_note备忘录 2.队名:删库跑路队 3.团队成员 队员(不分先后) 项目角色 黄敦鸿 后端工程师.测试 黄华 后端工程师.测试 黄骏鹏 后端工程师.测试 黄源钦 ...

  9. Shell:子shell概念

    Blog:博客园 个人 目录 shell环境 什么是子shell 子shell的分类 shell环境 每个shell进程有一个自己的运行环境,不同的Shell进程有不同的Shell环境.Shell解析 ...

  10. Python(二) 安装PIL

    1. 在使用PIL之前我们需先安装PIL. 在cmd中使用 pip 指令,竟报错,没有这个指令 2. 我就给环境变量加上这个指令,找到本机上安装python的位置,找到scrips文件夹, 看到里面的 ...