A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈可 中级黑马   /  2014-1-19 15:12  /  1509 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沈可 于 2014-1-21 14:48 编辑

什么是程序集?什么是应用程序域?

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

5 个回复

倒序浏览
程序集是物理概念比如.dll文件或者.exe文件,应用程序域是内存中的划分,一般是和进程做比较的。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
以前使用进程边界来隔离在同一台计算机上运行的应用程序。每一个应用程序被加载到单独的进程中,这样就将该应用程序与在同一台计算机上运行的其他应用程序相隔离。  隔离这些应用程序的原因在于内存地址是与进程相关的;在目标进程中,不能通过任何有意义的方式使用从一个进程传递到另一个进程的内存指针。此外,您不能在两个进程间进行直接调用。您必须代之以使用代理,它提供一定程度的间接性。  托管代码必须先通过一个验证过程,然后才能运行(除非管理员已授权跳过该验证)。此验证过程将确定这些代码是否会尝试访问无效的内存地址或执行导致代码运行时所在的进程无法正常运行的其他操作。通过此验证测试的代码将被认为是类型安全的。由于公共语言运行库能够验证代码是否为类型安全的代码,所以它可以提供与进程边界一样大的隔离级别,而其性能开销则要低得多。  应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。您可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。   隔离应用程序对于应用程序安全也是十分重要的。例如,您可以在单个浏览器进程中运行几个 Web 应用程序中的控件,同时使这些控件不能访问彼此的数据和资源。
回复 使用道具 举报
程序集是一个抽象的概念

物理上:程序集是一个或多个模块/资源文件的逻辑性分组.(程序集是一个或多个类型定义文件及资源文件的集合。)

作用上:程序集是重用、安全性以及版本控制的最小单元。在CLR的世界中,程序集相当于一个“组件”。CLR操作的是程序集,换言之,CLR总是首先加载包含“清单”元数据的文件。

在生成托管模块(由面向CLR的编译器生成的各种编译后文件,如exe(target:exe),dll(target:library),.netmoudle(tartget:moudle)文件,这些就是托管模块)时,如果指定的生成目标位exe,winexe,libarry,这些生成的目标文件是包含有清单元数据的,否则该模块文件不包含清单元数据。



程序集的分类:

物理上:可以分为多文件和单文件程序集。

唯一性上:可以分为强命名程序集(能被唯一确认的程序集)和非强命名程序集(也叫弱命名程序集)。

对程序集进行部署时可以有两种方式:私有部署的程序集(可以是强命名程序集,也可以是弱命名程序集)和非私有部署的程序集(只能是强命名程序集)

强命名程序集:能被唯一确认的程序集,有多种实现方法来实现,而在CLR中应用公钥/秘钥对进行实现。

若命名程序集:不带有公钥和密钥对的程序,不保证自身的唯一性。

应用程序域:

操作系统和运行时环境通常会在应用程序间提供某种形式的隔离。例如,Windows 使用进程来隔离应用程序。为确保在一个应用程序中运行的代码不会对其他不相关的应用程序产生不良影响,这种隔离是必需的。

应用程序域为安全性、可靠性、版本控制以及卸载程序集提供了隔离边界。应用程序域通常由运行时宿主创建,运行时宿主负责在运行应用程序之前引导公共语言运行时。

详情参见MSDN

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
应用程序域:一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着
对象激活的序列的任何位置) 。
应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运行时行为可以
预知。
在一个单独的进程中可以存在多个应用程序域。应用程序域可以理解为一种轻量级进程。起到安全的作用。占
用资源小。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
程序集是一个托管应用的基本的部署单元,主要由三个部署组成:IL指令、元数据和资源。
程序域,从功能上讲,通过应用程序域实现的隔离机制为托管代码的执行提供了一个安全的边界。它涉及到的是程序在内存中的执行,在内存中所暂用的范围。
从与程序集的关系来讲,我们可以将应用程序域看成是加载程序集的容器。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马