默而识之,学而不厌!

生成,打包

上一篇 / 下一篇  2008-10-02 11:51:01 / 个人分类:.net

类型生成模块(编译器生成标准PE文件包括PE表头,CLR表头,元数据,IL代码)

将模块组合为程序集(对类型进行打包,进行版本控制,实施安全策略,并使用他们,必须将类型放在程序集的模块部分)

有时会使用AL.exe而不是编译器来生成程序集。
1.如果我们要创建的程序集包含来自不同编译器生成的模块;
2.生成模块时还不知程序集的打包需求。
3.生成仅含资源的程序集(卫星程序集)

在程序集中包含资源文件
1.AL.exe创建程序集时,可用/embed[resource]将资源文件嵌入程序集中。也可用/link[resource]只更新ManifestResourceDef表和FileDef表,以反映资源的存在,资源文件仍然独立,和程序集一起打包部署。
2.或者用CSC.exe的/resource和/linkresource命令行开关


语言文化是程序集标识的一部分

首先创建一个包含代码和默认资源的程序集,生成时暂不指派语言文化,然后再创建一个或多个包含特定语言文化的卫星程序集(不包含任何代码)。
通常使用AL.exe来创建卫星程序集,用/c[culture]:text来制定语言(text),卫星程序集部署在基目录的text子目录中,运行时用System.Resources.ResourceManager类来访问卫星程序集中的资源。

强命名程序集和非强命名程序集
结构上是相同的,真正区别在强命名程序集有一个发布者的公钥/私钥对签名,惟一的标识了程序集的发布者,利用公钥/私钥对,还可以实施安全策略和版本策略。

强命名程序集(可进行全局部署)

如果一个程序集要被多个应用程序访问,那么必须放在一个CLR确知的目录内,但,不同公司可能会生产出同名程序集,很明显简单的用文件名来区分已经不够。所以一个强命名程序集包含四个惟一标识程序集的特性(文件名,版本号,语言文化,公有密钥标记)。
微软选择了标准的公钥/私钥对加密技术其他技术有GUID,URL,URN)。首先获得一个公钥/私钥对,然后将公有密钥和程序集相关联。

一个强命名程序集包含一个文件名,一个版本号及一个语言文化信息。另外,还有一个发布者的私有密钥签名。
SN.exe可生成一个公钥/私钥对(XXX.keys)

公用密钥很大,所以公有密钥标记应运而生,它是对公有密钥进行散列转化后取后8个字节得到的。

只需把System.Reflection.AssemblyKeyFileAttribute特性的一个实例应用到源码中:

[assembly:AssemblyKeyFile("XXX.keys")]

编译器在源代码中遇到该特性时,打开XXX.keys文件,用私有密钥对程序集进行签名,并将公有密钥嵌入清单(AssemblyDef)中。 

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-08  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 707
  • 日志数: 23
  • 建立时间: 2007-03-23
  • 更新时间: 2008-10-03

RSS订阅

Open Toolbar