100165401.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 250 行 · 第 1/3 页
HTM
250 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
13.2.5 构建程序集
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165401.htm">
13.2.5 构建程序集
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165401.htm'><font color='red'>13.2.5 构建程序集</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165398.htm'>13.2.2 命名空间、程序集和组件</a></div><div style='float:right;width:49%'>·<a href='100165399.htm'>13.2.3 私有程序集和共享程序集</a></div><div style='float:left;width:49%'>·<a href='100165400.htm'>13.2.4 查看程序集</a></div><div style='float:right;width:49%'>·<a href='100165402.htm'>13.3 跨语言支持</a></div><div style='float:left;width:49%'>·<a href='100165403.htm'>13.3.1 CTS和CLS</a></div><div style='float:right;width:49%'>·<a href='100165404.htm'>13.3.2 语言无关性(1)</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><p class="MsoNormal"><span lang="EN-US"></span></p>
<h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><span lang="EN-US">13.2.5 </span><span style="FONT-FAMILY: 黑体">构建程序集</span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">前面学习了程序集的含义,下面就要构建一些程序集了。当然,本书前面已经构建了一个程序集,因为</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">可执行程序也是一个程序集,但下面要介绍一下程序集的特定选项。</span></p>
<h4><span lang="ES">1. </span><span style="FONT-FAMILY: 黑体">创建模块和程序集</span></h4>
<p class="MsoNormal" style="LINE-HEIGHT: 18pt"><span style="FONT-FAMILY: 宋体">在</span><span lang="EN-US">Visual Studio .NET</span><span style="FONT-FAMILY: 宋体">中,所有的</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">项目类型都会创建一个程序集,无论是选择</span><span lang="EN-US">DLL</span><span style="FONT-FAMILY: 宋体">,还是</span><span lang="EN-US">EXE</span><span style="FONT-FAMILY: 宋体">项目类型,都会创建一个程序集。使用命令行</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">编译器</span><span lang="EN-US">csc</span><span style="FONT-FAMILY: 宋体">,也可以创建模块。模块是一个没有程序集特性的</span><span lang="EN-US">DLL(</span><span style="FONT-FAMILY: 宋体">所以它不是程序集,但可以在以后添加到程序集中</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。命令</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><strong><span lang="EN-US">csc /target:module hello.cs </span></strong></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt; FTEL: 0cm"><span style="FONT-FAMILY: 宋体">创建模块</span><span lang="EN-US">hello.netmodule</span><span style="FONT-FAMILY: 宋体">,可以使用</span><span lang="EN-US">ildasm</span><span style="FONT-FAMILY: 宋体">可以查看这个模块。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">模块也有一个清单,但在该清单中没有</span><span lang="EN-US">.assembly</span><span style="FONT-FAMILY: 宋体">条目</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">除了引用的外部程序集之外</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。模块没有程序集特性,不能用模块来配置版本或许可,而只能在程序集的范围内进行。在模块的清单中有程序集的引用。使用</span><span lang="EN-US">csc</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">/addmodule</span><span style="FONT-FAMILY: 宋体">选项,可以把模块添加到现有的程序集。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">为了比较模块和程序集,下面生成一个简单的类</span><span lang="EN-US">A</span><span style="FONT-FAMILY: 宋体">,并编译它:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><strong><span lang="EN-US">csc /target:module A.cs</span></strong></p>
<p class="MsoNormal" style="LAYOUT-GRID-MODE: char; LINE-HEIGHT: 17.6pt; FTEL: 3.25pt"><span style="FONT-FAMILY: 宋体">编译器生成了文件</span><span lang="ES">A.netmodule</span><span style="FONT-FAMILY: 宋体">,它不包括程序集的信息</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">使用</span><span lang="ES">ildasm</span><span style="FONT-FAMILY: 宋体">可以查看清单信息</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,模块的清单显示了所引用的程序集</span><span lang="ES">mscorlib</span><span style="FONT-FAMILY: 宋体">和</span><span lang="ES">.module</span><span style="FONT-FAMILY: 宋体">条目</span><span style="FONT-FAMILY: 宋体">,如图</span><span lang="ES">13-8</span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p align="center"><span lang="EN-US"><img height="196" src="13/image017.jpg" width="425" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="EN-US"> 13-8</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">下面生成一个程序集</span><span lang="EN-US">B</span><span style="FONT-FAMILY: 宋体">,它包括模块</span><span lang="EN-US">A.netmodule</span><span style="FONT-FAMILY: 宋体">。不需要用一个源文件来生成这个程序集:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><strong><span lang="EN-US">csc /target:library /addmodule:A.netmodule /out:B.dll </span></strong></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">在使用</span><span lang="EN-US">ildasm</span><span style="FONT-FAMILY: 宋体">查看程序集时,只能找到一个清单。在清单中,引用了程序集</span><span lang="EN-US">mscorlib</span><span style="FONT-FAMILY: 宋体">。接着看看带有散列算法和版本的程序集部分。算法的数量决定了用于创建程序集的散列代码的算法类型。在编程创建程序集时,可以选择该算法。清单的部分是属于该程序集的所有模块的一个列表。下面是属于该程序集的模块</span><span lang="EN-US">A.netmodule</span><span style="FONT-FAMILY: 宋体">,从模块中导出的类是程序集清单的一部分,从程序集本身导出的类则不是,如图</span><span lang="EN-US">13-9</span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">模块的作用是什么?模块可以更快地启动程序集,因为并不是所有的类都在一个文件中。模块只在需要时加载。使用模块的另一个原因是是否要用多种编程语言来创建一个程序集:一个模块使用</span><span lang="EN-US">VB.NET</span><span style="FONT-FAMILY: 宋体">来编写,另一个模块使用</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">编写,这两个模块都包括在一个程序集中。</span></p>
<h4><span lang="ES">2</span><span lang="EN-US">. </span><span style="FONT-FAMILY: 黑体">使用</span><span lang="ES">Visual Studio .NET</span><span style="FONT-FAMILY: 黑体">创建程序集</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">如上所述</span><span style="FONT-FAMILY: 宋体">,</span><span lang="ES">Visual Studio .NET</span><span style="FONT-FAMILY: 宋体">中的所有项目类型都创建程序集</span><span style="FONT-FAMILY: 宋体">;</span><span style="FONT-FAMILY: 宋体">使用</span><span lang="ES">Visual Studio .NET 2003</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">则不支持直接创建模块。</span></p>
<p align="center"><span lang="EN-US"><img height="248" src="13/image018.jpg" width="390" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="EN-US"> 13-9</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在创建一个</span><span lang="ES">Visual Studio .NET</span><span style="FONT-FAMILY: 宋体">项目时,会自动生成源文件</span><span lang="ES">AssemblyInfo.cs</span><span style="FONT-FAMILY: 宋体">,在该文件中,可以使用一般的源代码编辑器配置程序集的属性,下面是从向导中生成的一个文件:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; BACKGROUND: #f2f2f2"><span lang="ES">using System.Reflection;</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">using System.Runtime.CompilerServices;</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">//</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">// General Information about an assembly is controlled through the following </span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">// set of attributes. Change these attribute values to modify the </span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">// information associated with an assembly.</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">//</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyTitle("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyDescription("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyConfiguration("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyCompany("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyProduct("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyCopyright("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyTrademark("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">[assembly: AssemblyCulture("")]</span></p>
<p class="a6" style="BACKGROUND: #f2f2f2"><span lang="ES">//</span></p>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?