三:初识程序集(assembly)

     前面已明白了什么是托管模块,但在DotNet平台中,CLR不是和模块一起工作的,它操作的是程序集。程序集是一个或多个类型定义文件及资源文件的集合。

  如上图,编译器把多个托管模块和源文件编译成一个程序集,程序集有如下几点作用:
     (1)程序集定义了可重用类型
     (2)程序集标记了一个版本号
     (3)程序集可以有关联的安全信息
     (4)与反射Reflection结合起来用,动态创建你所需要的类                                                      
     (5)与反射Reflection结合起来用,获得Assemble里类的信息
     (6)使用别人已封装好的类(后面三点来自AXzhz文章)
     程序集包含的各个类可以用不同的编程语言来实现。例如一些类可以用C#来实现,一些可以有VB来实现。编译使用C#语言来编写的类时,编译器会生成一个模块,编译用VB语言来实现的类时,编译器生成另一个模块。然后可以用一个工具将所有的这些模块合并成一个程序集。其他开发人员在使用这个程序集时,只知道这个程序集包含了一系列的类,不必关心这些类是用什么编程语言来实现的。
  一个程序集可以包含多个命名空间,一个命名空间也可以包含多个程序集.如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式。只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型。也就是说,你要创建一个类的实例,必须知道该类的命名空间(这个一般都知道)和程序集(这个很容易被我们忽略,因为一般我们不需要引用外部的程序集),例如我们经常使用的文本编辑器,必须先引用该程序集,也就是添加该组件,之后再引用它的命名空间,这样才能正确使用。

     在VS2005或2008中创建一个解决方案,在这个解决方案中添加项目,默认情况下一个项目就是一个程序集,但也可以更改成一样的。IDE自动生成一个AssemblyInfo.cs文件来记录程序集的信息。如以下代码为在VS2008中创建一个解决方案,其中有一个项目的AssemblyInfo.cs:

 1using System.Reflection;
 2using System.Runtime.CompilerServices;
 3using System.Runtime.InteropServices;
 4
 5// 有关程序集的常规信息通过下列属性集
 6// 控制。更改这些属性值可修改
 7// 与程序集关联的信息。
 8[assembly: AssemblyTitle("WebApplication1")]//定义程序集清单的程序集标题自定义属性
 9[assembly: AssemblyDescription("")]//提供程序集的版本说明
10[assembly: AssemblyConfiguration("")]//为程序集指定生成配置,例如发布或调试
11[assembly: AssemblyCompany("番茄花园")]//定义程序集清单的公司名称自定义属性
12[assembly: AssemblyProduct("WebApplication1")]//定义程序集清单的产品名称自定义属性
13[assembly: AssemblyCopyright("Copyright © 番茄花园 2009")]//定义程序集清单的版权自定义属性
14[assembly: AssemblyTrademark("")]//定义程序集清单的商标自定义属性
15[assembly: AssemblyCulture("")]//指定程序集支持的区域性
16
17// 将 ComVisible 设置为 false 使此程序集中的类型
18// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
19// 则将该类型上的 ComVisible 属性设置为 true。
20[assembly: ComVisible(false)]
21
22// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")]
24
25// 程序集的版本信息由下面四个值组成:
26//
27//      主版本
28//      次版本
29//      内部版本号
30//      修订号
31//
32// 可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,
33// 方法是按如下所示使用“*”:
34[assembly: AssemblyVersion("1.0.0.0")]
35[assembly: AssemblyFileVersion("1.0.0.0")]
36

 

      附:在张逸:晴窗笔记的文章解决方案、项目、程序集、命名空间对这几个的概念和关系有很好的解释。


 

posted @ 2009-01-20 01:48  Done  阅读(955)  评论(1编辑  收藏  举报