源文来看:http://www.cnblogs.com/netatomy/archive/2008/06/10/1216872.html

程序集(Assembly)是.NET程序的最小组成单位。每个程序集都有自己的名称、版本等信息。程序集通常

表现为一个文件(.exe或.dll文件),这样的程序集被称为单文件程序集,这种程序集是最常见的。程序

集也可以由多个文件组成,每个文件都是一个模块文件或者是一个资源文件,这样的程序集被称为多文件

程序集。下面来了解一下如何生成单文件程序集和多文件程序集。

1. 单文件程序集的生成

这是最常见的程序集,使用 Visual Studio 只能生成单文件程序集。使用 csc.exe 能够很轻松地生成

单文件程序集:

csc.exe /target:library /resource:Hello.jpg Hello.cs

上述命令执行后,会生成一个名为 Hello.dll 的文件,该文件组成了单文件程序集。这个文件是一个托

管模块,存储了类型元数据和中间语言,还嵌入了资源文件 Hello.jpg 的内容(通过使用 /resource

选项)。类型元数据描述了模块中定义的类型及其成员,中间语言是编译后的托管代码。

程序集本身其实是一个逻辑概念,对于自身的描述是通过程序集清单来实现的。程序集清单是一种元数据

,描述了程序集的名称、版本、区域性和强名称信息,还包括组成程序集的文件的列表和资源信息,以及

其他信息。在单文件程序集中,程序集清单的元数据直接保存在主模块文件中。

在本例中,程序集中的名称是Hello,版本没有提供,默认为0.0.0.0,区域性为语言中立,强名称信息为

空,文件列表只有Hello.exe,托管资源为Hello.jpg。

2. 多文件程序集的生成

多文件程序集比较少见,而且除了使用 csc.exe 之外,有时还需要使用 AL.exe。假设有两个源代码文件

A.cs 和 B.cs,我们有两种生成多文件程序集的方法,这两种方法的主要区别在于程序集清单是存储在某

个模块中还是单独存储于主模块中。

先看第一种方法,只使用csc.exe就可以了:

csc.exe /target:module A.cs

csc.exe /target:library /addmodule.A.netmodule /out:Hello.dll B.cs

第一个命令将 A.cs 编译为一个模块文件,A.netmodule,该文件仅包含类型元数据和中间语言,不包含

程序集清单,是一种“原始”的模块文件,不能独立存在,必须从属于程序集。第二个命令将 B.cs 编译

成模块文件,Hello.dll。这个文件除了包含类型元数据和中间语言之外,还存储了程序集清单,因为成

为主模块文件。此时,程序集的名称仍然为 Hello,但文件列表的内容变成了两个:A.netmodule 和

Hello.dll。

再来看第二种方法,需要使用 csc.exe 和 al.exe 两个命令:

csc /target:module A.cs

csc /target:module B.cs

al.exe /target:library /out:Hello.dll A.netmodule B.netmodule

前两个命令将 A.cs 和 B.cs 编译为两个“原始”的模块文件,A.netmodule 和 B.netmodule。第三个

命令使用了AL.exe(Assembly Linker,程序集链接器),该命令能够将 A.netmodule 和 B.netmodule

组合到程序集中。这样,最终会生成 Hello.dll 这个主模块文件,该文件将仅包含程序集清单。在这个

程序集清单中,文件列表的内容变成了三个:A.netmodule,B.netmodule 和 Hello.dll。

多文件程序集不仅生成麻烦,而且应用似乎也不是很广泛,因为对于CLR来说,它只认识程序集,所以部

署的时候,都是以程序集作为最小单位。一旦某个“原始”模块发生了改变,整个程序集都必须重新生成

。另外,只有程序集有版本,模块作为程序集的组成部分,不能被版本化。

认识程序集:1. 程序集的生成相关推荐

  1. 二、源代码=程序集及程序集概念介绍

    文本脉络图如下: 一.源代码-面向CLR的编译器-托管模块-(元数据&IL代码)中介绍了编译器将源文件编译成托管模块(中间语言和元数据),本文主要介绍如何将托管模块合并成程序集. 1.程序集的 ...

  2. 使用sn.exe为程序集签名

    前言 在写上一篇随笔时,为理解EF事务底层的原理,我去Github上把EF的源码下载放到自己项目调试,不过在编译时遇到了下面这个报错信息.经过一番查阅,了解到了程序集签名(也称强名称签名)的概念.报错 ...

  3. .Net高级技术——程序集

    程序集(Assembly),可以看做是一堆相关类打一个包,相当于java中的jar包(*).打包的目的:程序中只引用必须的程序集,减小程序的尺寸:一些程序集内部的类不想让其他程序集调用. 我们调用的类 ...

  4. 友元程序集(C# 和 Visual Basic)

    友元程序集(C# 和 Visual Basic) Visual Studio 2013 "友元程序集"是一种能够访问其他程序集的 Friend (Visual Basic) 或 i ...

  5. 使用 NuGet 管理我们的程序集 - 预发行版

    1.缘起 在我们的项目中.须要引用的组件统一放在一个 Libs 文件夹下.不管对于平台上的公共组件.还是应用模块,都是如此. 假设一个应用模块,比如能源管理(EM).要引用平台提供的公共组件,比如数据 ...

  6. .NET 之路 | 007 详解 .NET 程序集

    上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前讲的 .NET 执行模型的顺序,这一篇我具体讲讲程序集. 什么是 ...

  7. C#图解教程 第二十一章 命名空间和程序集

    命名空间和程序集 引用其他程序集 在第1章中,我们在高层次上观察了编译过程.编译器接受源代码文件并生称名称为程序集的输出文件.这一章中,我们将详细阐述程序集以及它们是如何生成和部署的.你还会看到命名空 ...

  8. [007] 详解 .NET 程序集

    上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前讲的 .NET 执行模型的顺序,这一篇我具体讲讲程序集. 1什么 ...

  9. 【笔试面试】C#中的程序集

    1.      C#中的程序集(Assembly) 答:程序集是包含一个或多个类型定义文件和资源文件的集合.它允许我们分离可重用类型的逻辑表示和物理表示. 程序集是一个可重用.可实施版本策略和安全策略 ...

最新文章

  1. visual studio code(vs code)如何更换颜色背景
  2. 关于series的统计
  3. 图解:人性的7种兵器(互联网商业逻辑)
  4. 4)公有成员\私有成员和静态成员
  5. Docker: Jenkins里的pipeline编写基本技巧
  6. 百度初级认证有用吗_知乎“打败”了百度知道吗?
  7. 面向对象(基础oop)之继承总结
  8. 知道央视大楼为什么又叫“痔疮”么,看看你就明白了
  9. freeradius 测试mysql_在linux下安装配置mysql+freeradius
  10. .NET应用程序调试—原理、工具、方法
  11. 硬件开发笔记(七): 硬件开发基本流程,制作一个USB转RS232的模块(六):创建0603封装并关联原理图元器件
  12. 2010年8月刊:精选热门微博
  13. android 计步器acc,利用腾讯云云函数执行部署修改小米运动步数代码_每天自动修改步数...
  14. your cuda software stack is old.we fall back to the NIVIDIA driver for some compilation. Update your
  15. lambda中FirstOrDefault和First
  16. 内存规格的解释(Unbuffered DIMM,Registered DIMM和SODIMM)
  17. 查看计算机的硬盘的命令,电脑怎么看配置,查看电脑配置命令
  18. 驼峰,下划线(蛇形)和帕斯卡型一些转换
  19. 山西工程技术学院计算机专业在哪个校区,山西工程技术学院有几个校区及校区地址...
  20. Google Play的QUERY_ALL_PACKAGES或REQUEST_INSTALL_PACKAGES权限问题

热门文章

  1. 百万点赞怎么来?用 Python 制作抖音视频原来这么简单
  2. 无光驱安装原版 windows server2008,win7 的方法,64位的
  3. 树莓派耳机接口有电流声、杂音
  4. spring boot整合jsp报错 Whitelabel Error Page 500或者404 问题处理
  5. Unity 百度智能对话API
  6. adb基本操作及环境配置
  7. 使用POI编辑Word文档添加文字水印
  8. 好看动漫+电影+电视剧分享
  9. Linux进程通信的试验
  10. 如何用excel实现并列排序