学习 第三章CLR共享程序集和强命名程序集

CLR 支持两种程序集:弱命名程序集(weakly named assembly)和强命名程序集(strongly named assembly)

程序集可采用两种方式部署:私有和全局

弱命名程序集只能以私有方式部署

强命名程序集部署即可私有又全局。

强命名程序集具有4个重要特性:文件名(不计扩展名),版本号,语言文化,公钥

例如:"MyTypes,Vesion=1.0.8123.0,Culture=neutral,PublicKeyToken=b77a5c561934e89"

注意:可利用辅助类 System.Reflection.AssemblyName 轻松构造程序集名称,并获取程序的各个组成部分

由于弱命名程序集总是私有部署,所以CLR在应用程序基目录和子目录(具体子目录由XML配置文件的Probing元素的PrivatePath特性指定)中搜索程序集文件时只使用程序集名称(添加.dll和.exe扩展名)

弱命名程序集除了有文件名,程序集版本号和语言文化,还有发布私钥进行了签名

创建强命名程序集第一步是用.Net Framework SDK和Microsoft Visual Studio随带的Strong Name实现程序(SN.exe)获取密钥;

为了生成公钥和私钥对,运行SN.exe: SN -k MyCompany.snk 这告诉SN.exe创建MyCompany.snk 文件。文件中包含二进制形式的公钥和私钥。

要生成和以前版本的.NET Framework 兼容的程序集,还必须AssemblySignaturekeyAttribute创建联署签名(counter-signature)

详情参看:https://msdn.microsoft.com/zh-cn/library/hh415055(v=vs.110).aspx

注意,SN.exe 实用程序未提供任何显示私钥的途径

编译程序集时使用/keyfile:<file>编译器开关: csc /keyfile:MyCompany.snk Program.cs  ;C#编译器看到这个开关会打开指定文件(MyCompany.snk),用私钥对程序集进行签名,并将公钥嵌入清单。

注意只能对含有清单的程序集文件进行签名;程序集其他文件不能被显示签名。

使用LsDasm.exe查看新程序集的元数据。

全局程序集缓存(Global Assembly Cache,GAC)

  GAC 的具体位置是一种实现细节,不同版本会有所变化。但一般能在以下目录发现它:%systemRoot%\micorsoft.Net\Assmbly

  开发和测试时在GAC中安装强命名程序集最常见的工具是GACUtil.exe。

延迟签名

  准备打包自己的强命名程序集时,必须使用受严密保护的私钥对它进行签名。然而,开发和测试程序集时,访问这些受严密保护的私钥可能有点碍事儿。有鉴于此,.net Framework 提供了延迟签名(delayed signing)的支持。

  

 

时间: 2024-08-28 12:36:26

学习 第三章CLR共享程序集和强命名程序集的相关文章

第三章 共享程序集和强命名程序集

1. 概述 本章的重点是如何创建可由多个应用程序访问的程序集. 2. 名词解释 ① 公钥标记:从公钥派生的一个小的哈希值. 3. 主要内容 3.1 两种程序集,两种部署   CLR支持两种程序集:弱命名程序集 和 强命名程序集. 一个程序集可以采取两种方式来部署:私有 或 全局. 弱命名程序集只能私有部署,强命名程序集两种部署皆可. 3.2 为程序集分配强名称 强命名程序集具有四个重要组成部分: ① 一个文件名 ② 一个版本号 ③ 一个语言文化标识 ④ 一个公钥(一般用 公钥标记). 用SN.e

03.共享程序集和强命名程序集

进行私有部署时,程序集放在应用程序的基目录(或者它的一个子目录)中的,这个应用程序专用的.以私有方式部署程序集,可以对程序集的命名.版本和行为进行全面的控制 CLR支持两种程序集,一种是弱命名程序集,一种是强命名程序集 强命名程序集使用发布者的公钥/私钥对进行签名,它唯一性地标识了程序集的发布者 弱命名程序集只能进行私有部署,"全局部署的程序集"是部署到一些已知的位置的程序集 强命名程序集 具有4个重要的attributes,它们共同对程序集进行唯一性标识:一个文件名.一个语言文化,一

共享程序集和强命名程序集(下)

1.1   强命名程序集能防篡改 1.2   延迟签名. 1.3   私有部署强命名程序集 1.4   "运行时"如何解析类型引用 1.5   高级管理控制(配置) 原文地址:https://www.cnblogs.com/lzcgis/p/10251725.html

共享程序集和强命名程序集(上)

1.1   两种程序集,两种部署(待更新...) 两种程序集:弱命名程序集,强命名程序集.两者结构完全相同.区别:强命名程序集使用发布者的公钥/私钥进行签名. 部署:私有或者全局. 1.2   为程序集分配强名称 1.3   全局程序集缓存 1.4   在生成的程序集中引用强命名程序集 原文地址:https://www.cnblogs.com/lzcgis/p/10251718.html

共享程序集和强命名程序集(4):“运行时”如何解析类型引用

GAC(Global Assembly Cache) 全局程序集缓存 安装公共语言运行库的每台计算机都有一个称为全局程序集缓存的机器级代码缓存.全局程序集缓存存储专门指定由计算机上的多个应用程序共享的程序集. "运行时"如何解析类型引用 首先是一组毫无营养但是有用的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using

oracle学习 第三章 常用的SQL*PLUS命令 ——02

今天接着昨天的RUN命令继续讲. 3.5 n(设置当前行)命令和A(PPEND)(附加)命令 设想,你输入了例3-10的查询语句 例 3-10 SQL> SELECT ename 2 FROM emp; 例 3-10 结果 看到以上输出时,您发现在SELECT子句中忘了job,sal.这时您又如何修改您的SELECT子句呢?首先您应该使用SQL*PLUS的L(LIST)命令来显示SQL缓冲中的内容. 例 3-11 SQL> L 例 3-11 结果 在例3-11显示的结果中,2后面的"

安卓学习——第三章

安卓学习——第三章 由于自身的实力不足,经过尝试后放弃了自己编写记账本app,而是打算找到合适的相关项目进行学习.我找到了几个AndroidStudio项目,我在AndroidStudio里面直接打开文件,发现无法运行.想到应该是import项目才行(我可真是菜的真实). 通过import这些项目之后,发现其中一个项目竟然是可以跑起来的.我便将项目通过手机进行测试,发现在手机上也是可以运行的.不过有一些在外观上的问题. 首先是在手机上的显示,会有一部分文字内容是乱码.我便去找编译器里面相关文件的

CLR 关于强命名程序集 .

如何创建强命名程序集(Strong Name Assembly)     创建一个强命名程序集首先需要获得一个用强命名实用工具   (Strong Name Utility,即SN.exe,.NET SDK自带)产生的密钥.   下面简要介绍一下SN.exe的一些用法. 要产生一个公钥/私钥对:     a)SN –k MyCompany.Keys   该命名告诉SN.exe创建一个名为MyCompany.keys的文件.MyCompany.keys文件将包含以对以二进制格式存储的公有密钥和私有

强命名程序集,签名,延迟签名

强命名程序集 如果一个程序集有一个唯一的标记,那么这个程序集就可以叫做强命名程序集.在.NET框架中是通过公钥/私钥加密来产生这个唯一标记的.一个强命名程序集包含四个唯一标志程序集的特性:文件名(没有扩展名),版本号,语言文化信息(如果有的话),公有秘钥. 这些信息存储在程序集的清单(manifest)中.清单包含了程序集的元数据,并嵌入在程序集的某个文件中.下面的字符串标识了二个不同的程序集文件: “MyType, Version=1.0.1.0,Culture=neutral, Public