.NET框架怎样解决DLL Hell问题?

Microsoft.NET框架介绍了几个新功能,旨在简化应用程序发布和解决DLL Hell。本文介绍了DLL Hell问题的产生原因。

.NET框架与DLL Hell问题:版本问题

从客户的角度,最常见的版本问题就是我们所说的DLL Hell 问题。简单地讲,DLL Hell 是指当多个应用程序试图共享一个公用组件(如某个动态连接库(DLL)或某个组件对象模型(COM)类)时所引发的一系列问题。最典型的情况是,某个应用程序将要安装一个新版本的共享组件,而该组件与机器上的现有版本不向后兼容。虽然刚安装的应用程序运行正常,但原来依赖前一版本共享组件的应用程序也许已无法再工作。在某些情况下,问题的起因更加难以预料。比如,当用户浏览某些Web 站点时会同时下载某个Microsoft ActiveX? 控件。如果下载该控件,它将替换机器上原有的任何版本的控件。如果机器上的某个应用程序恰好使用该控件,则很可能也会停止工作。

在许多情况下,用户需要很长时间才会发现应用程序已停止工作。结果往往很难记起是何时的机器变化影响到了该应用程序。用户可能会回忆起一周前安装了一些东西,但安装与目前看到的状态并没有任何明显的关联。更糟的是,现在很少有诊断工具帮助用户(或帮助他们的技术支持人员)确定有什么问题。

这些问题的原因是应用程序不同组件的版本信息没有由系统记录或加强。而且,系统为某个应用程序所做的改变会影响机器上的所有应用程序—现在建立完全从变化中隔离出来的应用程序并不容易。

很难建立一个隔离应用程序的一个原因是当前运行时环境只允许单独版本组件或应用程序的安装。这个限制意味着组件的编写者必须以向后兼容的方式编写他们的代码,否则当他们安装新组件的时候会有终止已有应用程序的风险。实际上,如果可能的话,编写永远向后兼容的代码是非常难的。在.NET 中,side by side 概念是版本问题的核心。"Side by side" 是在同一台机器上同时运行不同版本的相同组件的能力。使用支持并列的组件,编程人员不必努力维护严格的向后兼容,因为不同的应用程序自由使用某个共享组件的不同版本。

.NET框架与DLL Hell问题:发布和安装

现在安装应用程序是多步过程。一般,安装一个应用程序包括复制许多软件组件到磁盘,和在系统中进行一系列描述那些组件的注册项。

注册表中的项和磁盘上文件的分隔使复制应用程序和卸载他们非常困难。而且,在注册表中完全描述某个COM 类所需的许多项之间关系非常松散。这些项常常包括联合类、接口、类型库和DCOM app ID 的项,不涉及任何放在注册表文档扩展或组件类别的项。要时常手工保持这些项的同步。

最后,需要该注册足迹激活任何COM 类。这极大地复杂了发布分布式应用程序的过程,因为必须到每个客户端的机器进行适当的注册项。

如今另一个共同问题是:对一个正在运行的应用程序进行更新是不现实的。这是Web 应用程序最大的问题,Web 应用程序必须停止工作然后重启动以更新应用程序使用的COM 类。

这些问题主要由从组件自己分离传来的组件描述引起的。换句话说,应用程序不是自描述的和独立的。

以上就对需要.NET框架解决的DLL Hell问题进行了简单的描述。

转载于:https://www.cnblogs.com/heartstill/archive/2011/09/28/2193866.html

.NET框架怎样解决DLL Hell问题?相关推荐

  1. SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题

    SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 参考文章: (1)SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 (2)https://www. ...

  2. SpringBoot框架中解决日期展示问题

    SpringBoot框架中解决日期展示问题 参考文章: (1)SpringBoot框架中解决日期展示问题 (2)https://www.cnblogs.com/w-essay/p/11453751.h ...

  3. 什么是框架?框架要解决的问题?

    什么是框架? 框架(Framework)是整个或部分系统的可重用设计, 表现为一组抽象构件及构件实例间交互的方法; 另一种定义认为,框架是可被应用开发者定制的应用骨架. 前者是从应用方面而后者是从目的 ...

  4. [模块加载失败:找不到指定的模块]——如何解决DLL加载问题?

    [模块加载失败:找不到指定的模块]--如何解决DLL加载问题? 如果您在使用Windows操作系统时,遇到了"模块加载失败:找不到指定的模块"这样的错误提示,那么您很可能遇到了DL ...

  5. 什么是dll文件且解决dll文件丢失

    什么是dll文件 DLL是Dynamic Link Library的缩写,意为动态链接库. 在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文 ...

  6. HarmonyOS应用框架如何解决多设备交互问题?

    随着全场景多设备生活方式的不断深入,用户拥有的设备越来越多,除了我们每天带在身上的手机.手腕上的智能手表.口袋里面的无线耳机.背包里面的PC和Pad.另外家里还有智能电视.智能冰箱等设备,这些年,汽车 ...

  7. 主讲:A1(老吴) 时间:2004-10-22 15:00 主题:0一点点编译。1解决DLL与EXE沟通时String和其它Memory的问题.2公布hmOlevariants.pas 3成批...

    主讲:A1(老吴) 时间:2004-10-22 15:00 主题: 0>一点点编译. 1>解决DLL与EXE沟通时String和其它Memory的问题. 2>公布hmOlevaria ...

  8. 隐私计算:使用混淆电路开源框架Obliv-C解决百万富翁难题

    "假设有两个百万富翁,他们都想知道谁更富有,但他们都想保护好自己的隐私,谁都不愿意让对方或者任何第三方知道自己真正拥有多少财富.那么如何在保护好双方隐私的情况下,计算出谁更有钱呢?" ...

  9. 主题:的中间层框架 第二节 |DLL的Exception你如何处理?|不同宿主内如果接口抛出异常,怎么处理...

    主题:<插件式>的中间层框架 第二节 时间:2005-01-21 15:00 主讲:D10.天地弦 A1.老大 (一).DLL的Exception你如何处理? (二).不同宿主内如果接口抛 ...

最新文章

  1. 微软ASP.NET MVC Beta版本发布
  2. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
  3. 【20171025早】alert(1) to win 练习
  4. C#——image与byte数组的转换
  5. MySQL5.7升级到8.0 之后,配合ubantu18.04遇到的常规问题以及非常规问题的解决方案
  6. 数组正遍历,数组倒遍历
  7. 30个HTML标签,10.30 html标签
  8. spring自动注入模型
  9. LeetCode ZigZag Conversion(将字符串排成z字型)
  10. TypeError: this.getOptions is not a function at Object.lessLoader less安装使用报错
  11. 解决chrome/IE浏览器被桔梗导航劫持的问题
  12. NodeJS:Express 框架实战解析视频教程
  13. fatal error C1083: 无法打开包括文件: “afx.h”: No such file or directory
  14. 教你阅读 Cpython 的源码(一)
  15. OpenCV C++案例实战二《生成蒙太奇图像》
  16. 传销分子为什么喜欢国学? PS:尽信书不如无书!
  17. 生成小学加减口算题JAVA算法
  18. 数学物理方法·基础篇-学习主要内容
  19. 10. 爬虫训练场,分页爬虫案例前端页面制作
  20. 派格生物科创板IPO状态终止:尚未实现商业化,2020年亏损1.3亿元

热门文章

  1. 如何在EDUIS中导出ETL字幕模板_给视频加字幕?这8个工具助力你的短视频创作!...
  2. angular 手动注入_手动引导Angular JS应用程序
  3. AngularJS自定义指令教程第2部分
  4. Spring定时器corn表达式详解
  5. 随机抽取文件内容中的一行
  6. 智慧城市建设步入深水区 正深入到城市建设的细部环节
  7. 教你使用faceBook的chisel来提高调试效率
  8. struts 国际化
  9. ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
  10. 网站长尾关键词优化指南