打印

[asp.net教程] 利用.net框架简化发布和解决dll hell问题(2)

利用.net框架简化发布和解决dll hell问题(2)

最后,需要该注册足迹激活任何 com 类。这极大地复杂了发布分布式应用程序的过程,因为必须到每个客户端的机器进行适当的注册项。
   
  如今另一个共同问题是:对一个正在运行的应用程序进行更新是不现实的。这是 web 应用程序最大的问题,web 应用程序必须停止工作然后重启动以更新应用程序使用的 com 类。
   
  这些问题主要由从组件自己分离传来的组件描述引起的。换句话说,应用程序不是自描述的和独立的。
   
   
  解决方案的特性
   
  .net 框架必须提供以下基本的能力解决刚刚描述的问题:
   
  应用程序必须是自描述的:自描述的应用程序去掉了对注册表的依赖,能够毫无影响的安装和简单的卸载和复制。
   
   
  必须记录和加强版本信息:版本支持必须建立在平台内部以保证依赖的适当版本在运行时载入。
   
   
  必须记得“上次已知的正确配置”:当应用程序成功运行时,平台必须提供记住这套一起工作的组件的能力—包括它们的版本—。
   
   
  必须支持并列组件:允许多个版本的组件同时安装和运行在机器上,允许调用者指定他们需要载入的版本代替不知不觉被强迫的版本。.net 框架通过允许框架自己的多个版本同时存在于一台单独的机器上使并列邻先了一步。这极大地简化了升级问题,因为管理员如果需要可以选择运行不同版本 .net 框架上的不同应用程序。
   
   
  必须使应用程序隔离: .net 框架必须简化(实际上已经默认)编写不受机器上其他应用程序的改变影响的应用程序。
   
   
  汇编:积木
   
  汇编是 .net 框架用于解决刚描述的版本和发布问题的积木。汇编是类型和资源的发布单元。在许多方面汇编和现在的 dll 相同。从本质上讲,汇编是“逻辑 dll”。
   
  汇编是通过元数据调用清单自描述的。就像 .net 使用元数据描述类型一样,它也使用元数据描述包含类型的汇编。
   
  汇编不仅仅于发布有关。例如,.net 中的版本在汇编层完成 —没有任何减少,就像一个模块或类型的版本化。而且,汇编还用于在应用程序之间共享代码。包含某个类型的汇编是该类型标志的一部分。
   
  访问安全系统的代码在其许可模型的内核中使用汇编。汇编的编写者在清单中记录一组运行该代码所需求的许可,然后管理员将许可授权给基于汇编的代码,此汇编包含该代码。
   
  最后,汇编也是类型系统和运行时间系统的核心,在其中他们为类型和服务建立了一个可视的边界作为解决引用类型的运行时间范围。
   
  汇编清单
   
  清单明确包括以下有关汇编数据:
   
  标识:一个汇编标识由三部分组成:名称、版本号和选项文化。
   
   
  文件列表:清单包括所有组成汇编的文件列表。对于每个文件,在建立清单时记录它的名称和内容的加密信息。该信息在运行时验证以确保发布单元的一致。
   
   
  引用的汇编:汇编间的关系保存在收集的汇编清单中。从属信息包括版本号,它用于运行时保证载入正确版本的关系。
   
   
  输出类型和资源:对类型和资源可用的可视选项包括“仅在我的汇编中可视”和“对我的汇编之外的调用者可视。”
   
   
  许可需求:汇编许可需求分为三组:汇编运行需求、需要的但汇编还有一些即使没授权的功能的需求,以及编写者不想汇编被授权的需求。
  il 反汇编 (ildasm) sdk 工具对于在汇编中查看代码和元数据很有帮助。图 1 是一个以 ildasm 现实的范例清单。.assembly 表示汇编而 .assembly extern 包含有关其他汇编所依赖的信息。

   
   
  <img src="/files/bpic/2006-10/7/0610717103331746.gif"">
   
  图 1. 以 il 反汇编显示的范例清单
   
  汇编结构
   
  到此为止,汇编主要以逻辑概念描述。本节通过描述他们如何在物理上体现帮助您使汇编更加具体。
   
  通常,汇编由四个元素组成:汇编元数据(清单)、元数据描述类型、实现该类型的媒介语言 (il) 代码和一组资源。不是所有的这些都出现在每个汇编中。只有清单是严格需要的,但类型或资源需要给汇编一些重要的功能。

TOP

返回顶部
AYBlue

Processed in 0.040613 second(s), 7 queries.

当前时区 GMT+8, 现在时间是 2009-1-10 11:58 京ICP备06054220号

清除 Cookies - 联系我们 - 163K.com - Archiver - WAP