默而识之,学而不厌!
生成,打包
上一篇 /
下一篇 2008-10-02 11:51:01
/ 个人分类:.net
类型生成模块(编译器生成标准PE文件包括PE表头,CLR表头,元数据,IL代码)
将模块组合为程序集(对类型进行打包,进行版本控制,实施安全策略,并使用他们,必须将类型放在程序集的模块部分)
有时会使用AL.exe而不是编译器来生成程序集。
1.如果我们要创建的程序集包含来自不同编译器生成的模块;
2.生成模块时还不知程序集的打包需求。
在程序集中包含资源文件
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: