第五章 程序集

本文介绍了.NET Framework中的程序集概念,包括程序集的生成与使用、组件化开发方法及其依赖性,并探讨了互操作程序集如何使得.NET应用能够调用COM组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 程序集的基础知识

1.1 程序集的生成与使用

2 程序集与组件化开发

2.1 组件的概念

2.2 组件化开发方法及步骤

2.3 组件化开发中的组件依赖性

3 互操作程序集与本地类型

3.1 .NET 互操作程序集


1 程序集的基础知识

1.1 程序集的生成与使用

“程序集(Assembly)”是 .NET Framework 中基本的软件模块,它可以包含数目不限的类型,其载体为一个或多个 DLL 文件,也可以是一个可独立执行的 EXE 文件。

一个项目如果需要使用特定程序集中的类型,需要添加对此程序集的 “引用”。

新建一个解决方案。此解决方案包含两个项目,MyDLLAssembly 是一个类库项目,其中定义了两个类:MyPublicClass 和 MyInnerClass,而UseMyDLLAssembly 则是一个控制台项目。

示例解决方案编译完成之后,生成两个程序集 MyDLLAssembly.dll 和 UseMyDLLAssembly.exe,其中 UseMyDLLAssembly.exe 需要引用 MyDLLAssembly.dll中的类型。

DLL/EXE 文件是程序集与命名空间的物理载体。

1.2 程序集的内部结构

1、程序集中包含项目所有源码编译生成的IL代码,这些代码完成特定的功能,在程序运行时将会被即时(Just-In Time,JIT)编译为本地代码(Native Code)。

2、程序集中必须要有一个类型清单,向外界说明 “我拥有多少个类,每个类有哪几种方法和字段” 之类的信息,这个清单被称为 “类型元数据(Type Metadata)”。

3、除此之外,当源码中要访问的某图片文件和字符串常量,也可以嵌入程序集中,这部分数据被称为 “资源(Resources)”。

元数据在 .NET Framework 中有很重要的作用。正式由于元数据的存在,使程序集成为了 “自说明的(Self-Description)”,即不再需要其他机制(比如注册表)帮助,自身就向外界提供了足够的信息。

2 程序集与组件化开发

2.1 组件的概念

所谓 “组件(Component)”,是指可以用于重用、发布和部署的软件模块。在 Win32 平台之上,这种组件规范称为 “COM(Component Object Model,组件对象模型)”,遵循 COM 规范开发出来的组件称为 COM 组件。

.NET 提供了一个全新的组件化模型,新的模型将组件统一为一种类型,即程序集(Assembly),.NET 平台上的组件化开发是基于程序集的。

注:在 .NET 中,一个程序集就是一个组件,组件的接口体现为组件中声明为 public 类型的共有成员,包括字段、方法、属性和事件。

2.2 组件化开发方法及步骤

组件化开发的基本方法如下:

(1)重用已有组件;

(2)开发部份新组件

(3)组合新旧组件搭建出新系统。

在整个开发过程中,组件的接口是关键。必须精心设计组件的接口,以方便地在多个项目中重用组件。

如图所示,在开发某一应用程序时,组件1自行开发,组件2向第三方软件公司购买,组件3与组件4功能相同,但实现不同。

2.3 组件化开发中的组件依赖性

在示例解决方案中,UseDLL项目要添加对 MyDLL 和 MyDLL2 两个程序集的引用,这就在UseDLL 组件与 MyDLL、MyDLL2 两个组件间建立了一个依赖关系。

由于组件的依赖关系,因此在编译解决方案时会有一个编译顺序的问题,原则上按照以下规则确定编译顺序:

先编译只被别人依赖,而不依赖别人的组件;之后,引用这些组件的其它组件就可以成功编译了。

同时在大型软件系统开发中,要注意组件的依赖性问题,要尽量避免出现循环依赖的情况。

当我们尝试两个组件相互引用时,会造成一个组件的循环依赖,Visual Studio 报告一个循环引用错误。

3 互操作程序集与本地类型

3.1 .NET 互操作程序集

在 .NET 出现之前,COM 是 Win32 平台的核心技术之一。

COM 组件最大的特点在于它可以方便地被组合到各种 Windows 应用程序中。如果 COM 组件是 DLL 形式的,它运行在调用此 COM 组件的进程的地址空间中;如果 COM 组件是 EXE 的,则它运行在自己独立的地址空间中,通过进程间通信相互传送信息。

微软 Office 软件包中的 Word、Excel 等都是 COM 组件,可以接收其它进程发送的命令以完成特定的工作。在这种情况下,我们称 Word 等 COM 组件为 “COM服务器(COM Server)”,称向 Word 等 COM 服务器发送命令的程序为 “ COM 客户端(COM Client)”。

在 .NET 应用程序中,可以使用 “互操作程序集” 调用 COM 组件:

要在 .NET 这个 “托管世界” 里调用 “非托管世界” 中的 COM 组件,我们必须通过一个中间的 “互操作程序集(Interop Assembly)” 作为桥梁,此程序集保存了与 COM 组件中各种类型对应的 .NET 类型。

注:“互操作程序集” 确定了 .NET 中的类型与 COM 组件中的类型之间的对应关系。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值