NET Framework 框架设计 第二章
时间:2025-02-22
时间:2025-02-22
.NET Framework 设计基础
第二章 生成、打包、 部署及管理应用程序 与类型
.NET Framework 设计基础
2.1 .NET框架部署目标 .NET框架部署目标“多年来,Windows一直背负着一个复杂和 多年来,Windows一直背负着一个复杂和 不稳定的坏名声”。而.NET的部署目标就 不稳定的坏名声”。而.NET的部署目标就 是想克服这些不足之处: 1、公司升级原来的代码复杂,它必须保证 “向下兼容”,这得花费大量的时间进行 向下兼容” 测试,而且结果效果也难说; 2、就是著名的“DLL hell”(DLL 地狱),当 、就是著名的“ hell” 地狱) 你在机器上安装新的应用程序时,会损坏 原有的应用程序,就是通常说的冲突;
.NET Framework 设计基础
3、安装过程复杂。大多应用程序的安装都 会影响到系统的各个部分。无论程序员打 包程序、安装及从机器上删除都是很令人 烦恼;(删除不彻底,垃圾文件太多) 4、安全问题。最突出的问题就是“Web应 、安全问题。最突出的问题就是“Web应 用程序” 用程序”在用户意识不到的情况下就被安 装到机器里(比如木马,.NET中的Web页 装到机器里(比如木马,.NET中的Web页 中如果没有和客户端的交互是不可能操作 本地文件的,这样是个解决方案)
.NET Framework 设计基础
2.2 将类型生成为模块例子: Public Class App { static public void Mian(System.String[] args){ System.Console.WriteLine(“Hi” System.Console.WriteLine(“Hi”); } } 程序定义了自己的一个类型(App),同时 程序定义了自己的一个类型(App),同时 使用了微软.NET的类型(System.Console) 使用了微软.NET的类型(System.Console) 生成应用程序执行下面的命令
.NET Framework 设计基础
csc.exe /out:App.exe /t:exe /r:MSCorLib.dll App.cs 解释: /out:App.exe――告诉编译器生成的可执行文件名,默认时也是生成这 /out:App.exe――告诉编译器生成的可执行文件名,默认时也是生成这 个文件; /t:exe――生成的文件类型为Win32控制台应用程序CUI /t:exe――生成的文件类型为Win32控制台应用程序CUI (/t[arget]:exe);windows里支持GUI和CUI。不代此参数时生成的就是 /t[arget]:exe);windows里支持GUI和CUI。不代此参数时生成的就是 CUI,也可以用“/t:winexe”生成GUI; CUI,也可以用“/t:winexe”生成GUI; /r:MSCorLib.dll――因为例子中引用的类System.Console包含在 /r:MSCorLib.dll――因为例子中引用的类System.Console包含在 “MSCorLib.dall”文件里头,/r[eference]:MSCorLib.dall就是让编译器到 MSCorLib.dall”文件里头,/r[eference]:MSCorLib.dall就是让编译器到 / MSCorLib.dll 文件标识的程序集中查找用到的外部类型。 MSCorLib.dll是非常特殊的一个文件,所以编译器会自动应用该程序集; MSCorLib.dll是非常特殊的一个文件,所以编译器会自动应用该程序集; 从上面分析上面的命令也可以写成: csc.e
xe /out:App.exe /t:exe App.cs甚至csc.exe App.cs App.cs甚至csc.exe 应该知道,这里生成的就是一个PE文件。 应该知道,这里生成的就是一个PE文件。
.NET Framework 设计基础
PE文件中的元数据,它包含三类表:定义表、引用表和清单表。下 PE文件中的元数据,它包含三类表:定义表、引用表和清单表。 文件中的元数据 面说明一下前两者, a.常见的元数据定义表:(自己定义的类的 信息) a.常见的元数据定义表 常见的元数据定义表: ModuleDef――包含一个托管模块的条目。条目包括模块的文件名和扩 ModuleDef――包含一个托管模块的条目。条目包括模块的文件名和扩 展名(不含路径)、一个模块版本ID 展名(不含路径)、一个模块版本ID (如 app.exe); app.exe); TypeDef――包含托管模块中定义的每一个类型(如类型app); TypeDef――包含托管模块中定义的每一个类型(如类型app); MethodDef――包含托管模块中定义的每一个方法,(每个方法条目 MethodDef――包含托管模块中定义的每一个方法,(每个方法条目 都包含一个指向ParamDef表对应条目); 都包含一个指向ParamDef表对应条目); FieldDef――包含托管模块中定义的每一个字段; FieldDef――包含托管模块中定义的每一个字段; ParamDef――包含托管模块中定义的每一个参数; ParamDef――包含托管模块中定义的每一个参数; PropertyDef――包含托管模块中定义的每一个属性; PropertyDef――包含托管模块中定义的每一个属性; EventDef――包含托管模块中定义的每一个事件; EventDef――包含托管模块中定义的每一个事件;
.NET Framework 设计基础
常见的元数据引用表: 常见的元数据引用表: (引用别人定义的类的信息) AssemblyRef――包含托管模块引用的每一个程序集。每个 AssemblyRef――包含托管模块引用的每一个程序集。每个 条目包括绑定程序集所必需的信息:程序集名称(不包含 扩展名)、版本号、语言文化和共有密钥标记,还包括一 些标记和一个散列值。 ModuleRef――托管模块有时引用到的在同一程序集其他不 ModuleRef――托管模块有时引用到的在同一程序集其他不 同模块内的类型,它就包含了这些模块的信息; TypeRef――包含托管模块引用的每一个类型的信息,每个 TypeRef――包含托管模块引用的每一个类型的信息,每个 条目包括类型的名称和一个指向类型所在位置的指针; MemberRef――包含托管模块引用的每一个成员的信息,每 MemberRef――包含托管模块引用的每一个成员的信息,每 个条 …… 此处隐藏:2992字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:工程设计费取费计算表