当前位置:编程学习 > C#/ASP.NET >>

使用 C# 2.0 命令行编译器

答案:发布日期: 12/22/2004 | 更新日期: 12/22/2004
Andrew W. Troelsen,Microsoft MVP

Intertech Training

摘要:本文分析了使用 C# 命令行编译器 csc.exe 生成应用程序的过程。同时,还将向读者介绍很多为 C# 2.0 独有的编译器选项,例如,extended/reference 标志和强名称支持。阅读完本文的内容之后,您将能够轻松地在没有向导的环境中生成单文件程序集和多文件程序集。

适用于:

Microsoft Visual C# 2.0

注 本文假定您熟悉 C# 编程语言和 .NET Framework 的结构。体验一下使用命令行工具的感觉还将证明很有帮助。

下载 CSCSample.msi 文件。



本页内容
scsc.exe 带来的乐趣
C# 编译器选项概览
配置环境变量
命令行基础知识
用于指定输入和控制输出的选项
编译 .NET 代码库
使用 C# 响应文件
使用 /reference 引用外部程序集
理解 C# 2.0 引用别名
使用 /addmodule 生成多文件程序集
创建 Windows 窗体应用程序
通过 csc.exe 使用资源
使用 /define 定义预处理器符号
csc.exe 的以调试为中心的选项
杂项
小结

scsc.exe 带来的乐趣
几乎没有人会否认集成开发环境 (IDE)(例如,Visual Studio 2005 和 Visual C# Express 2005)所提供的能使编程工作变得相当简单的诸多功能。但是,实际上 IDE 自己通常不能提供对基础编译器的所有方面的访问。例如,Visual Studio 2005 不支持生成多文件程序集。

此外,了解在命令行编译代码的过程,对于具有以下特征的用户可能有用:

• 偏爱最简单的生成 .NET Framework 应用程序的方法。

• 希望揭开 IDE 处理源代码文件的方法的秘密。

• 希望利用 .NET 生成实用工具,例如,nant 或 msbuild。

• 没有集成开发环境,例如,Visual Studio(但实际上具有免费提供的 .NET Framework SDK)。

• 正在基于 Unix的系统(在该系统中,命令行是必须使用的工具)上使用 .NET Framework,并且希望更好地了解 Mono 和/或 Portable .NET ECMA 兼容 C# 编译器。

• 正在研究当前未集成到 Visual Studio 中的备选 .NET 编程语言。

• 只是希望扩展他们的 C# 编程语言知识。


如果您属于上面所述的这些用户,那么就忠实于自己的选择并继续读下去吧。

返回页首
C# 编译器选项概览
C# 编译器 csc.exe 提供了大量用于对创建 .NET 程序集的方式进行控制的选项。站在一个较高层次来看,命令行选项属于下列八个类别之一(表 1)。

表 1. csc.exe 提供的标记的类别

C# 编译器类别 定义
输出文件
用于控制所生成的程序集的格式、可选的 XML 文档文件和强名称信息的选项。

输入文件
使用户可以指定输入文件和引用的程序集的选项。

资源
用于将任何必需的资源(例如,图标和字符串表)嵌入到程序集中的选项。

代码生成
这些选项控制调试符号的生成。

错误和警告
控制编译器处理源代码错误/警告的方式。

语言
启用/禁用 C# 语言功能(例如,不安全代码)以及条件编译符号的定义。

杂项
该类别的最有趣的选项使您可以指定 csc.exe 响应文件。

高级
该类别指定一些更加深奥并且通常不太重要的编译器选项。


注 1.0 和 1.1 版本的 C# 编译器中存在的 /incremental 标志现在已过时。

在阅读本文的过程中,您将了解每个编译器类别中存在的核心 标志(最重要的词是核心)。对于大多数开发方案,可以安全地忽略 C# 编译器的很多高级选项。如果您需要有关本文未予讨论的 csc.exe 功能的详细信息,请尽管放心,您可以参阅 Microsoft Visual Studio 2005 文档帮助系统(只须从“Search”选项卡中搜索“csc.exe”并深入查阅)。

注 MSDN 文档也会对您也很所帮助,因为它描述了如何在 Visual Studio(如果可用)内部设置 csc.exe 的特定选项。

返回页首
配置环境变量
在使用任何 .NET SDK 命令行工具(包括 C# 编译器)之前,需要配置开发计算机以识别它们的存在。最简单的方法是使用 Start | All Programs | Visual Studio 2005 | Visual Studio Tools 菜单选项,启动预配置的 Visual Studio 命令提示。这一特定的控制台能够自动初始化必要的环境变量,而无须您执行任何操作。(Visual Studio .NET 2003 用户需要启动他们各自的命令提示)。

注 如果您没有 Visual Studio,但是已经安装了 .NET Framework SDK,则可以从 Start | All Programs | Microsoft .NET Framework SDK 2.0 菜单选项启动预配置的命令提示。

如果您希望从任意的 命令提示使用 .NET 命令行工具,则需要手动更新计算机的 Path 变量。做法是,请右键单击桌面上的 My Computer 图标并选择 Properties 菜单选项。从出现的对话框中,单击位于 Advanced 选项卡下面的 Environment Variables 按钮。从出现的对话框中,在 System 变量列表框中的当前 Path 变量的结尾添加以下目录清单(请注意,必须用分号分隔各个条目):

C:\Windows\Microsoft.NET\Framework\v2.0.40607
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin

注 上面的列表指向我的当前 .NET 2.0 测试版的路径。您的路径可能因 Visual Studio 和/或 .NET SDK 的安装和版本的不同而略有不同,因此请确保执行完整性检查。

在更新 Path 变量之后,请立即关闭所有对话框和当前打开的任何 Console 窗口,以便提交设置。您现在应当能够从任何命令提示执行 csc.exe 和其他 .NET 工具了。要进行测试,请输入以下命令:

csc -?
ildasm -?

如果您看到有大量信息显示出来,那么您就可以继续了。

返回页首
命令行基础知识
已经能够熟练地在命令行工作的用户在使用 csc.exe 时不会有任何问题,因而可以跳到下一节。但是,如果您使用命令行的次数很有限,那么请让我说明一些基本的详细信息,以便进行必要的准备。

首先,可以使用反斜杠或单个短划线指定 csc.exe 的选项。其次,在 / 或 - 以及随后的标志之间具有额外的空格是非法 的。因此,“-help”是完全正确,而“- help”就行不通了。为了加以说明,让我们使用 help 标志检查完整的命令行选项集:

csc -help
csc /help

如果一切正常,则您应当看到所有可能的标志,如图 1 所示。



图 1. 帮助标志


很多选项都提供了简写表示法,以便为您节省一些键入时间。假设 help 标志的简写表示法是 ?,则您可以如下所示列出 csc.exe 的选项:

csc -?
csc /?

很多选项都需要附加的修饰,例如,目录路径和文件名。这种性质的标志使用冒号将标志与它的修饰分隔开来。例如,/reference 选项要求将 .NET 程序集的名称包括在程序集清单中:

csc /reference:MyLibrary.dll ...

其他标志在性质上是二元 的,因为它们或者被启用 (+),或者被禁用 (-)。二元标志总是默认为它们的禁用状态,因此您通常只需要使用加号标记。例如,要将所有编译警告都视为错误,可以启用 warnaserror 标志:

csc /warnaserror+ ...

标志的顺序无关紧要,但是在指定输入文件集合之前,必须列出所有标志的集合。另外值得说明的是,在修饰和它的关联数据之间具有额外的空格是非法 的。例如,请使用 /reference:MyLibrary.dll,而不要使用 /reference:MyLibrary.dll。

返回页首
用于指定输入和控制输出的选项
我们将要分析的第一组命令行选项用于指定编译器输入(表 2)和控制得到的输出(表 3)。请注意,下面的表还标记了特定于 C# 2.0 的选项和任何可用的简写表示法。

表 2. csc.exe 的以输入为中心的选项

输入标志 定义 是否特定于 C# 2.0?
/recurse
通知 csc.exe 编译位于项目的子目录结构中的 C# 文件。该标志支持通配符语法。


/reference (/r)
用于指定要在当前编译中引用的外部程序集。
否,但是 2.0 编译器提供了别名变体。

/addmodule
用于指定要包括在多文件程序集中的模块。



表 3. csc.exe 的以输出为中心的选项

输出标志 定义 是否特定于 C# 2.0?
/out
指定要生成的程序集的名称。如果省略该标志,则输出文件的名称基于初始输入文件的名称(对于 *.dll 程序集而言)或定义 Main() 方法的类的名称(对于 *.exe 程序集而言)。


/target (/t)
指定要创建的程序集的文件格式。


/doc
用于生成 XML 文档文件。


/delaysign
使您可以使用强名称的延迟签名生成程序集。


/keyfile
指定用于对程序集进行强命名的 *.snk 文件的路径。


/keycontainer
指定包含 *.snk 文件的容器的名称。


/platform
指定必须存在以便承载程序集的 CPU(x86、Itanium、x64 或 anycpu)。默认为 anycpu。



也许用途最多的输入/输出选项是 /target。该标志通过使用附加的修饰(表 4)告诉编译器您对生成哪个类型的 .NET 程序集感兴趣。

表 4. /target 标志的变体

目标修饰 定义
/target:exe
创建基于控制台的程序集。如果未指定 /target 选项,则这是默认选项。

/target:winexe
创建基于 Windows 窗体的可执行程序集。尽管您可以使用 /target:exe 创建 Windows 窗体应用程序,但控制台窗口将在主窗体的后台隐现。

/target:library
用于生成 .NET 代码库 (*.dll)。

/target:module
创建将成为多文件程序集

上一个:从 C++ 向 C# 迁移
下一个:如何用C#语言构造易做图程序

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,