程序集和应用程序的部署.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序集和应用程序的部署

Microsoft .NET 框架为集成的、面向服务的 Web 提供了平台 公共语言规范 COM 允许以不同的语言创建的对象相互进行通讯。相反,.NET 的公共语言运行库集成了所有的语言,并允许用一种语言创建的对象被使用另一种完全不同的语言写成的代码同等对待。由于有了标准的类型集、自我描述的类型信息(元数据)和公共的执行环境,公共语言运行库让这成为了可能。 尽管语言的集成是一个美好的目标,事实是,编程语言相互之间的差别非常大。例如,不是所有的语言的都会让您处理能够区别大小写的符号,提供无符号整数,提供操作符重载,联合,甚至是拥有支持可变数量参数的方法。 如果您想要创建能够用其他编程语言轻松访问的 .NET 类型,那么使用您的编程语言里肯定能够在其他所有语言里可用的特性是十分重要的。为了帮助您达到这一目的,Microsoft 定义了一个公共语言规范 (CLS) ,用来告诉编译器供应商其编译器必须支持的针对公共语言运行库的最小特性集。多个供应商已经在规划发布他们与 .NET 兼容的编译器了。 要注意,CTS 所支持的特性要比公共语言规范所定义的子集多得多,所以如果您不关心跨语言的操作性,那么您可以开发只会受到语言的特性集限制的类类型。 返回页首 元数据 上个月我提到过编译器的任务就是处理您的源代码并产生相应的 MSIL 。此外,编译器还负责把元数据嵌入到每个符合 .NET 的 EXE 和 DLL 里。简而言之,.NET 的元数据只不过是一个以二进制形式保存在可移植可执行 (PE) 文件里的信息集,它是在文件或者程序集里被声明类型和被实现方法的规范。元数据是诸如类型库和 IDL 文件这些原有技术的超集。值得注意的一件重要事情是,元数据要比其前身完整得多,而且总是与包含代码的文件相关联。事实上,元数据总是被作为代码嵌入到 EXE 和 DLL 里,这就不可能把两者分开。 所有符合 .NET 的编译器都需要发出关于编译源代码模块里每个类类型的完整元数据信息。这个元数据包含一个用于每个类型的声明和一个用于所有其成员(方法、字段、属性和事件)的声明,包括名称和类型。对于每个已实现的方法,元数据包括加载程序用来定位方法体的信息。 现在我会举几个例子来说明元数据的能力。假如说您正在使用 Visual Studio? 编辑源代码。在您的代码里,您希望对某个类对象调用一个方法。由于能够分析类型的元数据,Visual Studio 可以很轻易地向您显示类型的所有成员。此外,如果您调用一个方法,那么 Visual Studio 可以向您显示方法所需要的确切类型,并验证您的代码在正确地使用方法的返回类型。正如您能够看到的,元数据能够帮助您更快地和更加准确地开发代码。 像 Visual Studio .NET 这样的工具可使用叫做反射的技术检索文件的元数据信息。有一组类用来枚举文件里的类型以及类型的成员。更多信息请见 System.Reflection 命名空间。 图 1 :MSIL 反编译器 查看完整的图像。 我最喜欢使用的一个 .NET 工具是 MSIL 反编译器 — ILDasm.exe 。图 1 显示了当您对含有 MSCorLib.dll 的基础框架的一部分运行 ILDasm 时会发生什么。在这个窗口里,ILDasm 会分析文件的元数据,并以树型的层次结构显示命名空间、类型、接口和成员。在任何方法上双击都会弹出另一个窗口;它会显示编译器所生成的真正 MSIL 代码。图 2 显示了 System.Object 的 GetType 方法的 MSIL 代码。 .method public instance class System.Type GetType() il managed { // Code size 20 (0x14) .maxstack 2 .locals (class System.Type V_0) IL_0000: ldarg.0 IL_0001: call instance class System.Type System.Object::GetExistingClass() IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldnull IL_0009: bne.un.s IL_00012 IL_000b: ldarg.0 IL_000c: call instance class System.Type System.Object::InternalGetClass() IL_0011: stloc.0 IL_0012: ldloc.0 IL_0013: ret } // en

文档评论(0)

magui + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档