程序集和反射(一)
正常情况下,C#代码编译后生成构造块,一般分为以下几种:
exe --可执行程序(winform程序生成的叫winexe,控制台程序生成的是exe)
dll --动态链接库(可以动态加载的类库,是Windows系统中专用的)
netmodule --模块 (VS开发工具中无法生成模块,只能在SDK编译器下以命令行的方式手动生成)
这些都是Windows系统和Windows编程中才会有的概念。值得提醒的是:.NET平台上的托管代码,编译后
生成的exe,dll,和普通的win32应用程序(C/C++/VB6等)生成的exe,dll不同。
程序集,其实就是指的.NET框架应用程序的构造块,一般表现为exe和dll
在.NET出现之前,根本没有“程序集”这么个概念。
程序集的优点:
解决版本控制问题
解决dll冲突(Windows历史上著名的dll地狱)
Windows系统不允许相同目录下重名,所以会造成dll覆盖的严重问题。
通常软件安装都会操作“注册表”,还会往安装目录中写(dll)文件。
环境变量: 比如path, 是告诉系统, 当要求系统运行一个程序而没有告诉它程序所在的完整路径时,
系统除了在当前目录下面寻找此程序外, 还应到哪些目录下去寻找;)
以前在做Windows应用程序开发时,经常会将很多dll文件,拷贝到Windows环境变量指定的目录下。
这样的话,也容易重名,引发dll地狱
.NET中使用了GAC(全局应用程序缓存)来解决DLL地狱:
有了GAC,应用程序dll不需要拷贝到环境变量下,而是直接存放在GAC中。
程序集(dll)必须先加“签名”,这样的话,即使是重名,也不会发生冲突了。
GAC目录默认在C:/Windows/assembly下。
程序集组成:
1.程序集清单:可以看作是目录
2.类型元数据:指的是编程中用到的资源,元数据是自我描述的
3.实现这些类型的MSIL(中间语言)
4.资源集(二进制)
单文件程序集:单层的小项目通常都是一个dll
多文件程序集:由于dll文件过大,加载困难,消耗资源。
所以,将某些模块独立出来,生成“多文件程序集”
使用SDK命令提示符,可以手动生成netmodule(模块)。
程序集清单的内容:
程序集的版本:可以通过,项目-右键-属性-程序集信息去修改。
在winform中,也可以通过修改AssemblyInfo.cs文件来实现
程序集的两种部署方式:
1.共享(全局)程序集:也叫“强命名程序集”,将程序集保存在GAC中(必须加签名)
2.私有程序集:也叫“弱命名程序集”,将程序集保存在应用程序目录或者子目录
使用SN工具,手动构建“强命名程序集”:
摘自 :编程世界一凡人
补充:Web开发 , ASP.Net ,