在.NET 中,新引入了一个程序集的概念,就是指经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll,或者是.exe的格式,但是要注意,它们跟普通意义上的WIN32可执行程序是完全不同的东西,程序集必须依靠CLR才能顺利执行。

之所以要编译为程序集然后由.NET FRAMEWORK解析执行,就是为了实现跨平台的功能。并且由CLR解析执行可以针对不同的具体平台生成具体针对性的优化代码,对执行效率也有好处。

程序集的格式如下:

WIN32文件头

CLR文件头

CIL代码

类型无数据(metadata)

程序集清单(manifest)

可选的嵌入资源

既然这儿都包含WIN32文件头了,跨平台又从何跨起呢?肯定不是这么简单,要是想在别的平台上,应该还是需要重新编译。

因为任何一个模块,要想让WINDOWS执行,必须先跟WINDOWS打招呼,然后由WINDOWS再调用CLR来解析执行你的模块,而不会由CLR直接监听到你的双击事件而启动解析。关于WIN32文件头,在VISUAL STUDIO 2008中,打开 Command Prompt 工具,然后在其中调用这个程序 : dumpbin 然后给其参数:

dumpbin  test1.exe  /headers                                  (这个工具也可以使用在普通WIN32可执行程序上。)

这样子就可以看到某一程序集的WIN32文件头信息。看一下头三行是这样子的:

Dump of file test1.exe

PE signature found

File Type: EXECUTABLE IMAGE  (刚看到时我发现这个 EXECUTABLE IMAGE,是不是普通的可执行程序不是IMAGE呢?打开一个普通的看了一下,发现也是。。)

dumpbin 工具还可以用 /clrheader 参数查看一个.NET程序集的 CLR 头信息。

接下来是CIL代码部分,这就是一个程序集的最核心部分了。CIL的细节日后再具体学习吧。

元数据部分完整地描述了程序集内含类型和引用外部类型的格式。.NET CLR利用元数据在内存的二进制布局类型中类型(以及类型成员)的位置,使远程方法调用更便利。元数据是反射得以实现的重要条件。

MANIFEST里面详细记录了程序集中的每一个模块,其版本,以及引用的外部程序集。

查看CIL , METADATA, MANIFEST 需要借助于 ildasm.exe 或者 reflector.exe 工具。

在大多数情况下,一个程序集由一个独立的模块组成。但是,有时候程序集大了后,为了降低耦合度,可以把它分解为多文件程序集。由多个 .dll 文件来组成它。其中会有一个 .dll 做为主模块。然后主模块的清单记录了它依赖的每一个 .dll 文件。并且,这些不同模块可以由不同的语言写成。

在VS2008中,选择新建项目中的 Class Library 就可以自动生成 .dll 类库文件。这时候,程序中没有Main()方法,你只能BUILD它,但不能运行它。

如果你要在某个项目中使用它,那么你需要添加到该二进制文件的reference 引用,然后using 它的命名空间,这样子。。。

私有程序集 与 共享程序集

私有程序集就是不同项目中生成的程序集,仅供本项目使用,或者可以经过配置被某一个其它项目的程序集引用。

共享程序集是机器级别的共享程序集,它放置一个叫GAC (Global Assembly Cache)的地方,可以被其它所有的私有程序集所引用。注意,GAC中只能放置.dll文件,而不能有.exe 文件。关于如何部署到GAC,具体细节查书。关于程序集的部署配置有很多需要注意的地方。日后再说。

转载于:https://www.cnblogs.com/zhangxl/p/4455637.html

.NET程序集(Assembly)相关推荐

  1. CLR: 那些你不知道你不知道的事情 程序集(Assembly)和模块(Managed Module)

    CLR: 那些你不知道你不知道的事情   程序集(Assembly)和模块(Managed Module)     前言 一直都用集成开发坏境(IDE),一直对模块和程序集的概念理解的不是很直观,因为 ...

  2. C#-获取当前程序集Assembly的文件名

    C#获取当前程序集Assembly的文件名 fly043488 展开 C# Code: string codeBase = Assembly.GetExecutingAssembly().GetNam ...

  3. C#程序集Assembly学习随笔(第一版)_AX

    ①什么是程序集? 可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件. 嗯,这个确实简单了些,但我是这么理解的.详细: http://blog.csdn.net/sws83 ...

  4. c#笔记--程序集(Assembly)、模块(Module)、类型(class)、命名空间、反射

    Assembly   =装配件.表示一个程序集,它是一个可重用.无版本冲突并且可自我描述的公共语言运行时应用程序构建基块.(大概就是一组dll?)   命名空间:System.Reflection   ...

  5. C#程序集Assembly学习随笔(增补版,附图)_AX

    我一直以为我是个人才,今天才TMD知道,我是个天才!  下面的问题一下就弄出来了. 上篇我讲了下我对Assembly的初步认知. 现在来说说怎么使用已有的Assembly. 比如说我在做一个解决方案时 ...

  6. Unity关于程序集(Assembly )的那些事

    学习大纲 一. 什么是程序集? 二. 为什么使用程序集? 三. 如何在Unity中使用程序集 1.基本常识 2.自定义程序集 3. 多层级的程序集 4. Assembly Definition Ref ...

  7. C# 程序集(Assembly)

    程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件.程序集只是逻辑上的划分,一个程序集可以只由一个文件组成,也可由多个文件组成.不管是单文件程序集还是多文件程序集,它们 ...

  8. 为.Net程序集添加资源

    作者:宋华    本文选自:赛迪网  2002年12月06日 在.Net结构中,程序集Assembly(也称着程序集或托管Dll)是自我描述的安装单元,它可以只包括一个PE(可移植可执行)格式的Dll ...

  9. c# 添加中文描述 给enum_理解C# 核心概念 – C# 程序集本地化

    在之前几讲中,老白给大家介绍了C#中module和Assembly的生成和使用.在这一篇中,老白将更加深入的介绍下Assembly其中的一个知识点--本地化(Localization). 什么是本地化 ...

  10. 程序集强命名与GAC

    1.新建项目Other,在其中创建如下类: using System; using System.Collections.Generic; using System.Text; namespace O ...

最新文章

  1. awstats linux日志分析,(总结)Linux下使用awstats分析Nginx的日志详情
  2. JUC多线程核心知识-思维导图
  3. React 之 高阶组件的理解
  4. 禅道 bug状态 open_小工具大帮手,利用 @open-node/antman 实现 node.js 进程线上调试,无须重启...
  5. C++多线程实例(_beginThreadex创建多线程)
  6. 搭建spring MVC项目
  7. 百度机器同传技术及应用小记
  8. Linux进阶之路————远程登录与vim编辑器
  9. 一款漂亮的赞助打赏单页界面美化版源码
  10. 微软服务器系统桌面无图标,开机桌面没有图标的几种解决方法
  11. SQL Server中事件探测器Profiler的使用
  12. input 单击 图标_input添加小图标
  13. 这款折纸机器人玩具,可以帮助孩子学习编程和Robot知识
  14. Nuget如何管理本地的包
  15. 什么是推荐系统?推荐系统类型、用例和应用
  16. Kibana警报之索引连接器
  17. mapbox创建空白底图
  18. 企业运维之服务管理 -- supervisord
  19. flask+python 实时视频流输出到前台
  20. canal同步mysql数据到rocketmq集群

热门文章

  1. IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)
  2. tolua#是Unity静态绑定lua的一个解决方案
  3. 域账户登录时提示“你的账户配置不允许使用这台电脑。请试一下其他电脑” 解决方案
  4. memtrack: Couldn‘t load memtrack module (No such file or directory) 的问题解决
  5. JAVA编程思想——读书笔记 多态
  6. win11退回win10一直黑屏转圈怎么办 win11退回win10黑屏转圈的解决方法
  7. Win11键盘在哪里设置?Win11键盘的设置方法
  8. AutopilotSim2驾驶模拟器使用
  9. SpringBoot配置RunDashboard
  10. json动态生成复杂表头excel_Excel办公用品管理系统,全函数统算,图表动态展示高效轻松...