.NET 框架程序设计 第Ⅰ部分 Microsoft.NET框架基本原理
CLR的执行模型
托管模块的组成:PE表头,CLR表头,元数据,中间语言(IL)代码
中间语言(IL):面向对象的机器语言
程序集:组件复用,实施安全策略和版本策略的最小单位
程序集的组成:清单,托管模块,资源文件
即时编译(JIT),生成本地代码(NGen.exe),代码验证与安全(PEVerify.exe)
ECMA标准——动态脚本语言(ECMAScript)
ECMA标准——C#编程语言
ECMA标准——通用语言基础构造(CLI):文件格式,通用类型系统(CTS),可扩展元数据系统,中间语言(IL),对底层平台的访问(P/Invoke)
通用语言运行时(CLR),通用类型系统(CTS),通用语言规范(CLS)
CLR支持的三种互操作:
1、托管代码调用DLL中非托管函数(P/Invoke)
2、托管代码使用现存的COM组件(非托管组件作为COM服务器)(TlbImp.exe)
3、非托管代码使用托管类型(托管类型作为COM服务器)(TlbExp.exe、RegAsm.exe)
CSC.exe,AL.exe,ILASM.exe,ILDASM.exe,NGen.exe,PEVerify.exe,TlbImp.exe,TlbExp.exe,RegAsm.exe
生成、打包、部署及管理应用程序与类型
三类元数据表:定义表,引用表,清单表
程序集的特性:程序集定义了可重用的类型;程序集标识一个版本号;程序集可以包含与之相关的安全信息
多文件程序集:标准PE文件(包含清单表)(.exe,.dll),托管模块文件(.netmodule),资源文件(.jpg,.gif等)
使用多文件程序集通常有三个原因:
1、可以将类型分别实现在不同的文件中,从而允许文件在互联网环境中进行增量下载
2、可以按需要向程序集中添加资源或数据文件
3、可以使我们创建的程序集包含一些用不同编程语言实现的类型
语言文化中性程序集:没有指定语言文化的程序集,一般包含代码的程序集都为语言文化中性的程序集
卫星程序集:包含特定语言文化资源的单独的程序集,一般不包含任何代码(AL.exe)(System.Resources.ResourceManager)
程序集(弱命名)文件的定位:
AppBase\AsmName.dll
AppBase\AsmName\AsmName.dll
AppBase\privatePath1\AsmName.dll
AppBase\privatePath1\AsmName\AsmName.dll
AppBase\privatePath2\AsmName.dll
AppBase\privatePath2\AsmName\AsmName.dll
AppBase\AsmName.exe
AppBase\AsmName\AsmName.exe
AppBase\privatePath1\AsmName.exe
AppBase\privatePath1\AsmName\AsmName.exe
AppBase\privatePath2\AsmName.exe
AppBase\privatePath2\AsmName\AsmName.exe
卫星程序集文件的定位(以en-US为例):
AppBase\en-US\AsmName.dll
AppBase\en-US\AsmName\AsmName.dll
AppBase\en-US\privatePath1\AsmName.dll
AppBase\en-US\privatePath1\AsmName\AsmName.dll
AppBase\en-US\privatePath2\AsmName.dll
AppBase\en-US\privatePath2\AsmName\AsmName.dll
AppBase\en-US\AsmName.exe
AppBase\en-US\AsmName\AsmName.exe
AppBase\en-US\privatePath1\AsmName.exe
AppBase\en-US\privatePath1\AsmName\AsmName.exe
AppBase\en-US\privatePath2\AsmName.exe
AppBase\en-US\privatePath2\AsmName\AsmName.exe
私有部署程序集(xcopy)
共享程序集和强命名程序集
私有部署(强命名程序集,弱命名程序集),全局部署(强命名程序集)
强命名程序集四个唯一标识特性:文件名(没有扩展名),版本号,语言文化标识,公有密匙标记
强命名程序集文件的定位:GAC,codeBase(XML Config文件)指定的位置,弱命名程序集定位位置
全局程序集缓存(GAC)
CSC.exe编译时对引用程序集文件的定位(不带路径的文件名):
1、当前工作目录
2、编译器目前使用的CLR所在目录
3、任何用CSC.exe的/lib命令行开关指定的目录
4、任何LIB环境变量中指定的目录
CSC.exe响应文件(.rsp)
延迟签名的目的:保护私匙
延迟签名的步骤:
1、创建公匙/私匙对文件
SN.exe -k MyCompany.keys
2、提取公匙文件
SN.exe -p MyComapny.keys MyCompanyPublicKey.keys
3、取得公匙文件,为程序集定义两个特性
[assembly:AssemblyKeyFile("MyCompanyPublicKey.keys")]
[assembly:AssemblyDelaySign(true)]
4、生成程序集后,执行下面的命令以便后面可以将该程序集安装到GAC中,或者生成引用该程序集的其它程序集,以及测试该程序集。注意该操作只能执行一次,没有必要每次生成程序集时都执行一遍
SN.exe -Vr MyAssembly.dll
5、当准备打包和部署程序集时,取得公匙/私匙对文件,然后执行下面的命令
SN.exe -R MyAssembly.dll MyCompany.keys
6、执行下面的命令,恢复验证过程以进行测试
SN.exe -Vu MyAssembly.dll
程序集配置元素:probing,dependentAssembly(assemblyIdentity,bindingRedirect,codeBase,publisherPolicy)
发布者策略程序集(AL.exe)(Policy.1.0.JeffTypes.dll)
发布者策略程序集配置元素:dependentAssembly(assemblyIdentity,bindingRedirect,codeBase)
发布者策略程序集的目的:部署一个程序集的bug修复版或者补丁版(安装一个全新的应用程序时不应该用发布者策略程序集)
SN.exe,GACUtil.exe,MSIExec.exe
浙公网安备 33010602011771号