20分钟读懂程序集(1)
<div><p>一.程序集是什么</p><p>程序集,说白了就是一个 .dll 或者 .exe为后缀的文件。当然,如楼下朋友所说,是基于.NET平台的!~。谢谢。</p><p>程序集,包括以下部分:</p><ul> <li>Windows 文件首部</li> <li>CLR 文件首部</li> <li>元数据</li> <li>程序集清单</li> <li>可选的内嵌资源 <div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div> </li></ul><p>Windows文件首部(知道有这么一个东西就行):就是告诉windows操作系统,本应用程序是ASP.NET 还是Winform还是控制台应用程序。那怎么查文件首部信息呢?</p><blockquote><p>打开VS的命令行工具 然后输入</p><p>dumpbin/headers 项目名称</p></blockquote><div></div><p>程序集分为2类,私有程序集和共享程序集。</p><p>CLR 首部信息:运行于.NET 的程序都是需要这个标志哦!~如果需要查看它,也很简单,</p><blockquote><p>打开VS的命令行工具 然后输入</p><p>dumpbin/clrheaders 项目名称</p></blockquote><p>元数据:元素就是.NET 编译后的语言,我们可以打开ILDASM.exe 工具进行查看,然后再按Ctrl +M 打开元数据查看:</p><p></p><p>程序集清单:就是记录这个程序包含了哪些dll程序以及这个版本是啥等等。。。</p><p>二.单文件程序集和多文件程序集</p><p>2.1单文件程序集</p><p>我们大多数的情况用的都是单文件程序集哦!。这个特别好理解,比如我们新建一个类库工程,然后进行编译,一般来说,编译之后我们会得到一个 *.dll的文件,ok,这个就是单文件程序集啦!~</p><p>2.1多文件程序集</p><p>好,我们来说说多文件程序集。我们得知道,程序集由什么构成?是模块。所以,多文件程序集就是有多个模块构成的程序集。很遗憾的是,如果我们需要构建多文件程序集,VS IDE 是没法做的,只能通过命令行的csc.exe 命令进行。真辛苦~~~。</p><p>(1)在记事本里 写一段简单的code,如下:</p><pre> </pre><ol> <li>using System; </li> <li> </li> <li>namespace Person </li> <li>{ </li> <li> public class China </li> <li> { </li> <li> public void DisplayChinese() </li> <li> { </li> <li> Console.WriteLine("I'm Chinese"); </li> <li> } </li> <li> } </li> <li>} </li></ol><p>然后,打开你VS 命令行,把上面的生成一个模块,命令如下:</p><blockquote><p>csc.exe /t:module China.cs</p></blockquote><p>我们能看到生成了一个:China.netmodule的模块文件。</p><p>(2),接着我们在新建一个文件,并且这个文件生成是dll文件。</p><pre> </pre><ol> <li>using System; </li> <li> </li> <li>namespace Person </li> <li>{ </li> <li> public class Japan </li> <li> { </li> <li> public void DisplayJapanese() </li> <li> { </li> <li> Console.WriteLine("I'm Japanese"); </li> <li> } </li> <li> } </li> <li>} </li></ol><p>(3)把刚China.netmodule模块加入到刚需要生成的dll文件中。</p><p>命令是:</p><blockquote><p>csc.exe /t:library /out:Lanny.dll Japan.cs /addmodule:China.netmodule</p></blockquote><p>我们能看到生成了一个Lanny.dll的文件。。我们可以把这个文件引入到程序中进行测试。Ok,我们一个多文件程序集就这样程序。但是,我感觉这样的用处不大。</p><pre> </pre><ol> <li>Japan j = new Japan(); </li> <li> j.DisplayJapanese(); </li> <li> Console.ReadKey(); </li></ol><p>能弹出“I'm Japanese”,说明我们引用成功了。</p></div>