学习 第三章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)的支持。

  

    

 

posted on 2015-10-13 15:27  紫色的冰  阅读(248)  评论(0编辑  收藏  举报