• 公共语言运行库中的程序集01概述


    程序集概述

    程序集是 .NET 框架编程的基本组成部分。程序集完成以下功能:

    1)      程序集包含公共语言运行库执行的代码。如果可移植可执行 (PE) 文件没有相关联的程序集清单,则将不执行该文件中的 Microsoft 中间语言 (MSIL) 代码。请注意,每个程序集只能有一个入口点(即 DllMainWinMain Main)。

    2)      程序集形成安全边界。程序集就是在其中请求和授予权限的单元。

    3)      程序集形成类型边界。每一类型的标识均包括该类型所驻留的程序集的名称。在一个程序集范围内加载的 MyType 类型不同于在其他程序集范围内加载的 MyType 类型。

    4)      程序集形成引用范围边界。程序集的清单包含用于解析类型和满足资源请求的程序集元数据。它指定在该程序集之外公开的类型和资源。该清单还枚举它所依赖的其他程序集。

    5)      程序集形成版本边界。程序集是公共语言运行库中最小的可版本化单元,同一程序集中的所有类型和资源均会被版本化为一个单元。程序集的清单描述您为任何依赖项程序集所指定的版本依赖性。

    6)      程序集形成部署单元。当一个应用程序启动时,只有该应用程序最初调用的程序集必须存在。其他程序集(例如本地化资源和包含实用工具类的程序集)可以按需检索。这就使应用程序在第一次下载时保持精简。

    7)      程序集是支持并行(side-by-side)执行的单元。

    程序集可以是静态的或动态的。静态程序集可以包括 .NET 框架类型(接口和类),以及该程序集的资源(位图、JPEG 文件、资源文件等)。静态程序集存储在磁盘上的可移植可执行 (PE) 文件中。您还可以使用 .NET 框架来创建动态程序集,动态程序集直接从内存运行并且在执行前不存储到磁盘上。您可以在执行动态程序集后将它们保存在磁盘上。

    有几种创建程序集的方法。您可以使用过去用来创建 .dll .exe 文件的开发工具,例如 Visual Studio 2005。您可以使用 Windows 软件开发工具包 (SDK) 中提供的工具来创建带有在其他开发环境中创建的模块的程序集。您还可以使用公共语言运行库 API(例如 Reflection.Emit)来创建动态程序集。

     

    程序集的优点

    程序集旨在简化应用程序部署并解决在基于组件的应用程序中可能出现的版本控制问题。

    最终用户和开发人员比较熟悉当今基于组件的系统所产生的版本控制和部署问题。一些最终用户曾经历过在计算机上安装新应用程序失败的事情,发现已有应用程序突然停止工作。许多开发人员花费了大量的时间来使所有必需的注册表项保持一致,以便激活 COM 类。

    通过在 .NET 框架中使用程序集,许多开发问题得以解决。因为程序集是不依赖于注册表项的自述组件,所以程序集使无相互影响的应用程序安装成为可能。程序集还使应用程序的卸载和复制得以简化。

    版本控制问题

    目前,Win32 应用程序存在两类版本控制问题:

    1)      版本控制规则不能在应用程序的各段之间表达,并且不能由操作系统强制实施。目前的办法依赖于向后兼容,而这通常很难保证。接口定义一经发布就必须是静态的,并且单段代码必须保持与以前版本向后兼容。此外,通常要对代码进行设计,以便在任意给定时间在计算机上只能出现和执行代码的一个版本。

    2)      没有办法在创建到一起的多套组件集与运行时提供的那套组件之间保持一致。

    这两类版本控制问题结合在一起产生了 DLL 冲突,在这些冲突中,安装一个应用程序可能会无意间破坏现有的应用程序,因为所安装的某个软件组件或 DLL 与以前的版本不完全向后兼容。出现此情况后,系统不支持诊断和解决此问题。

    最终解决 DLL 冲突

    Microsoft® Windows® 2000 开始致力于解决这些问题。它所提供的两个功能可以部分地解决 DLL 冲突:

    1)      Windows 2000 使您能够创建这样的客户端应用程序,其中的 .dll 依赖文件与该应用程序的 .exe 文件位于相同的目录中。Windows 2000 经过配置,能够在检查完全限定的路径或搜索常规路径前,检查 .exe 文件所在目录中的组件。这使组件可以独立于其他应用程序所安装和使用的组件。

    2)      Windows 2000 锁定 System32 目录中随操作系统提供的文件,使这些文件不会在安装应用程序时被无意替换。

    公共语言运行库使用程序集来继续致力于 DLL 冲突的彻底解决。

    程序集解决方案

    为了解决版本控制问题以及导致 DLL 冲突的其余问题,运行库使用程序集来执行以下功能:

    1)      使开发人员能够指定不同软件组件之间的版本规则。

    2)      提供强制实施版本控制规则的结构。

    3)      提供允许同时运行多个版本的软件组件(称作并行执行)的基本结构。

     

    原文地址:

    http://msdn.microsoft.com/zh-cn/library/k3677y81(v=VS.90).aspx
    http://msdn.microsoft.com/zh-cn/library/6h38y9z9(v=VS.90).aspx
  • 相关阅读:
    Windows服务的快速搭建与调试(C#图解)
    HttpWebRequest采集读取网站挂载Cookie的通用方法
    javascript数字格式化通用类——accounting.js使用
    entity framework框架生成摘要文档为空(没有元数据文档可用)的bug解决方案
    Jquery取得iframe中元素的几种方法Javascript Jquery获取Iframe的元素、内容或者ID,反之也行!
    常用Sql整理笔记
    字符串循环移位
    C++ STL体系结构、 编程方法及存在的问题
    二维数组的分配以及数组指针数组
    C++构造函数详解及显式调用构造函数
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2131467.html
Copyright © 2020-2023  润新知