博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二章 生成、打包、部署和管理应用程序及类型 2.2 将类型生成模块
阅读量:6309 次
发布时间:2019-06-22

本文共 2382 字,大约阅读时间需要 7 分钟。

1)将包含多个类型的源代码文件生成为一个可以部署的文件

先看下面代码:

View Code
1 public sealed class Program {
2 public static void Main() {
3 System.Console.WriteLine("Hi"); 4 } 5 }

 为了演示命令,将上述代码放在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 文件。

转载于:https://www.cnblogs.com/dltao/archive/2011/11/23/2260162.html

你可能感兴趣的文章
简单的一条SQL,不简单的做事思维 NOT IN 、NOT EXISTS、LEFT JOIN用法差别 ...
查看>>
DataWorks:任务未运行自助排查
查看>>
ionic/cordova热部署
查看>>
「镁客早报」特斯拉裁员,马斯克解释没有办法;微软推出Azure DevOps赏金计划...
查看>>
Flink入坑指南第五章 - 语法糖 view
查看>>
centos 7.4 使用 pgxc_ctl 安装与使用
查看>>
Redis 单key值过大 优化方式
查看>>
【数据库】表分区
查看>>
nutz-sqltpl 1.3.4.RELEASE 发布,在 Nutz 项目中“解决 Java 拼接 SQL”问题
查看>>
城市 | 800个地铁站数据透析的京沪白领图鉴:隐形土豪、无产中产阶级和猪猪女孩...
查看>>
前端脚本!网站图片素材中文转英文
查看>>
linux的常用易忘命令
查看>>
PHP 分割字符串
查看>>
java 基于QRCode、zxing 的二维码生成与解析
查看>>
关于职业规划的一些思考
查看>>
img垂直水平居中与div
查看>>
Fabrik – 在浏览器中协作构建,可视化,设计神经网络
查看>>
防恶意注册的思考
查看>>
http2-head compression
查看>>
C# 命名空间
查看>>