您的位置:首页 > 其它

第二章 生成、打包、部署和管理应用程序及类型 2.2 将类型生成模块

2011-11-23 13:39 295 查看
1)将包含多个类型的源代码文件生成为一个可以部署的文件

先看下面代码:

View Code

public sealed class Program {
public static void Main() {
System.Console.WriteLine("Hi");
}
}


为了演示命令,将上述代码放在SimpleProgram.cs中,然后再vs命令行中执行命名:

csc.exe /out:SimpleProgram.exe /t:exe /r:MSCorLib.dll SimpleProgram.cs

提示:

/out:SimpleProgram.exe 默认路径为C:\Program Files\Microsoft Visual Studio *.*\VC

也可以设置绝对路径,SimpleProgram.cs 要使用绝对路径。

这个命令行指示C#编译器生成一个名为Program.exe 的可执行文件(/out:Program.exe )。生成的文件属于Win32 控制台应用程序类型(/t[arget]:exe)。

C#编译器处理源文件时,发现代码引用了System.Console 类型的WriteLine 方法。此时,编译器要核实该类型确实存在于某处,它确实有一个WriteLine 方法,而且传给这个方法的实参与方法指定的形参相匹配。由于这个类型在C#源代码中没有定义,所以为了顺利通过编译,必须向C#编译器提供一组程序集,使它能解析对外部类型的引用。在上述命令行中,我添加了/[eference]:MSCorLib.dll 开关,告诉编译器在MSCorLib.dll 文件所代表的程序集中查找外部类型。

*MSCorLib.dll 包含了所有核心类型:Byte,Char,String,Int32 等等。由于这些类型被使用得如此频繁,C#编译器会自动引用MSCorLib.dll 程序集。如果不想C#编译器会自动引用MSCorLib.dll 程序集,可以使用 /nostdlib 命令。

*Windows支持两种类型的应用程序:具有控制台用户界面(CUI)的,和具有图形用户界面(GUI)的。由于指定了/t:exe开关,所以C#编译器生成的是一个CUI应用程序。使用/t:winexe 开关,则可让C#编译器生成一个GUI 应用程序。

2)相应文件

响应文件(response file)是一个文本文件,其中包含一组编译器命令行开关。执行CSC.exe 时,编译器会打开响应文件,并使用其中包含的任何开关,感觉就像是这些开关直接在命令行上传递给CSC.exe。为了指示编译器使用一个响应文件,在命令行中,请在一个@符号之后指定响应文件的名称。例如,假定一个名为MyProject.rsp 的响应文件包含以下
文本:

/out:SimpleProgram.exe
/target:winexe

为了让CSC.exe 使用这些设置,可以像下面这样调用它:

csc.exe @MyProject.rsp SimpleProgram.cs

使用响应文件就不用每次都指定需要的命令了。

C#编译器允许同时指定多个响应文件。除了在命令行上显式指定的文件,编译器还会自动查找两个名为CSC.rsp 的文件(书上是这么写的,笔者只发现一个全局的,没有发现用于特定项目的。ps:网上大多直接照书上写,自己不亲身尝试,很不负责。有知情者,拍砖指教)。运行CSC.exe 时,它会在当前目录查找一个本地CSC.rsp 文件——应该将项目特有的所有设置都放到这个文件中。编译器还会在CSC.exe 文件所在的目录查找一个全局CSC.rsp 文件。如果有一些设置想应用于自己的全部项目,就应该将这些设置放到这个文件中。编译器会汇总并使用所有这些响应文件中的设置。本地和全局响应文件中的某个设置发生冲突,将以本地文件的设置为准。类似地,命令行上显式指定的设置将覆盖本地响应文件中的设置。
安装.NET Framework 时,会在%SystemRoot%\Microsoft.NET\Framework\vX.X.X 目录中安装一个默认的全局CSC.rsp 文件(X.X.X 是你安装的.NET Framework 的版本号)。

由于全局CSC.rsp 文件引用了响应文件列出的所有程序集,所以不需要使用C#编译器的/reference 开关来显式引用这些程序集。这个响应文件为开发人员带来了极大的方便,因为它允许开发人员直接使用Microsoft 发布的各个程序集中定义的类型和命名空间,不必在每次编译时都指定一个/reference 编译器开关。当然,引用所有这些程序集,可能对编译器的速度有一些影响。但是,如果源代码没有引用在上述任何程序集中定义的一个类型或成员,就不会影响最终的程序集文件,也不会影响程序的执行性能。

注意:使用/reference 编译器开关引用一个程序集时,可指定到一个特定文件的完整路径。然而,如果不指定路径,编译器会在以下位置搜索文件(按所列顺序):
*工作目录
*CSC.exe 本身所在的目录。MSCorLib.dll 总是从这个目录获取。路径的形式大致像这样:%SystemRoot%\Microsoft.NET\Framework\v4.0.##### 。
*使用/lib 编译器开关指定的任何目录
*使用LIB 环境变量指定的任何目录

提示:可以指定/noconfig 命令行开关,告诉编译器忽略局部和全局CSC.rsp 文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐