C#
命令行
(CSC.EXE)
编译器选项
(Framework 1.1)
Microsoft Visual Studio .NET 2003 IDE在给我们编程带来方便的同时,也带给了我们无知,在没有vs2003的情况下怎么编译我们的C#文件呢?还是回到原始的命令行编译吧。下面我将把Framework1.1中的编译命令全部介绍一下。
第一部分:命令介绍。
选项
用途
@
指定响应文件。
/?
列出编译器选项到 stdout。
/addmodule
指定一个或多个模块作为此程序集的一部分。
/baseaddress
指定加载 DLL 的首选基址。
/bugreport
创建一个包含信息(该信息便于报告错误)的文件。
/checked
指定溢出数据类型边界的整数算法是否将在运行时导致异常。
/codepage
指定编译中的所有源代码文件所使用的代码页。
/debug
发出调试信息。
/define
定义预处理器符号。
/doc
处理 XML 文件的文档注释。
/filealign
指定输出文件中节的大小。
/fullpaths
指定编译器输出中的文件的绝对路径。
/help
列出编译器选项到 stdout。
/incremental
启用源代码文件的增量编译。
/lib
指定通过 /reference 引用的程序集的位置。
/linkresource
创建指向托管资源的链接。
/main
指定 Main 方法的位置。
/noconfig
不要使用 csc.rsp 进行编译。
/nologo
取消显示编译器版权标志信息。
/nostdlib
不导入标准库 (mscorlib.dll)。
/nowarn
禁用编译器生成指定警告的能力。
/optimize
启用/禁用优化。
/out
指定输出文件。
/recurse
搜索子目录中要编译的源文件。
/reference
从包含程序集的文件中导入元数据。
/resource
将 .NET Framework 资源嵌入到输出文件中。
/target
使用下面的四个选项之一指定输出文件的格式:
/target:exe
/target:library
/target:module
/target:winexe
/unsafe
编译使用 unsafe 关键字的代码。
/utf8output
使用 UTF-8 编码显示编译器输出。
/warn
设置警告等级。
/warnaserror
将警告提升为错误。
/win32icon
将 .ico 文件插入到输出文件中。
/win32res
将 Win32 资源插入到输出文件中。
第二部分:命令的具体说明。
一@:指定响应文件
@response_file
其中:
response_file
一个列出编译器选项或要编译的源代码文件的文件。
备注
@ 选项使您可以指定包含编译器选项和要编译的源代码文件的文件。编译器将对这些编译器选项和源代码文件进行处理,就像已在命令行上指定了它们一样。
若要在一次编译中指定多个响应文件,请指定多个响应文件选项。例如:
@file1.rsp @file2.rsp
在响应文件中,多个编译器选项和源代码文件可以出现在同一行中。单个编译器选项的指定必须出现在同一行中(不能跨行)。响应文件可以带有以 # 符号开始的注释。
示例
以下几行来自一个示例响应文件:
# build the first output file
/target:exe /out:MyExe.exe source1.cs source2.cs
二 /? 列出编译器选项到 stdout
备注
该选项将编译器选项的列表和每个选项的简短说明发送到 stdout。如果编译中包含该选项,将不会创建输出文件,也不会进行编译。
三 /addmodule指定一个或多个模块作为此程序集的一部分
/addmodule:file[;file2]
其中:
file,file2
包含元数据的输出文件。该文件不能包含程序集清单。若要导入多个文件,请用逗号或分号分隔文件名。
备注
运行时,所有用 /addmodule 添加的模块必须与输出文件在同一目录中。也就是说,编译时可以在任何目录中指定模块,但是在运行时模块必须在应用程序目录中。如果在运行时模块不在应用程序目录中,则将得到 System.TypeLoadException。
file 不能包含程序集。例如,如果输出文件用 /target:module 创建,则其元数据可以用 /addmodule 导入。
如果输出文件用 /target 选项而不是 /target:module 创建,则其元数据无法用 /addmodule 导入,但是可以用 /reference 导入。
示例
编译源文件 input.cs 并从 metad1.netmodule 和 metad2.netmodule 中添加元数据来产生 out.exe:
csc /addmodule:metad1.netmodule;metad2.netmodule /out:out.exe input.cs
四 /baseaddress
指定加载 DLL 的首选基址
/baseaddress:address
其中:
address
DLL 的基址。可以将该地址指定为十进制、十六进制或八进制数。
备注
/baseaddress 选项使您可以指定加载 DLL 的首选基址。DLL 的默认基址由 .NET Framework 公共语言运行库设置。
请注意:该地址中低位的数将会被舍入。例如,如果指定 0x11110001,它将被舍入为 0x11110000。
若要完成 DLL 的签名进程,请使用 SN.EXE 的 -R 选项。
五 /bugreport
创建一个包含信息(该信息便于报告错误)的文件
/bugreport:file
其中:
file
要包含错误报告的文件的名称。
备注
/bugreport 选项将使下列信息放在 file 中:
编译中所有源代码文件的副本。
编译中使用的编译器选项列表。
有关编译器、运行库和操作系统的版本信息。
引用的程序集和模块(保存为十六进制数),.NET Framework SDK 附带的程序集除外。
编译器输出(如果有)。
将会提示给您的问题的说明。
关于考虑问题应如何解决(就此将会向您提示)的说明。
示例
编译 t2.cs,并将所有错误报告信息放置在文件 problem.txt 中:
csc /bugreport:problem.txt t2.cs
六 /checked 指定溢出数据类型边界的整数算法是否将在运行时导致异常
/checked[+ | -]
备注
/checked 选项指定不在 checked 或 unchecked 关键字范围内的整数算法语句,以及产生的值超出数据类型范围的整数算法语句是否导致运行时异常。
checked 或 unchecked 关键字范围内的整数算法语句不受 /checked 选项的影响。
如果不在 checked 或 unchecked 关键字范围内的整数算法语句产生的值超出数据类型范围,并且编译中使用了 /checked+ (/checked),则该语句将在运行时导致异常。如果编译中使用的是 /checked-,则该语句不在运行时导致异常。
示例
编译 t2.cs,并指定不在 checked 或 unchecked 关键字范围内并且产生的值超出数据类型范围的整数算法语句将在运行时导致异常。
csc t2.cs /checked
七 /codepage 指定编译中的所有源代码文件所使用的代码页
/codepage:id
其中:
id
编译中用于所有源代码文件的代码页的 ID。
备注
如果编译的一个或多个源代码文件没有被创建为使用计算机上的默认代码页,则可以使用 /codepage 选项指定应使用的代码页。/codepage 适用于编译中的所有源代码文件。
如果源代码文件是用计算机中的同一有效代码页创建的,或者是用 UNICODE 或 UTF-8 创建的,则不需要使用 /codepage。
八 /debug 发出调试信息
/debug[+ | -]
/debug:{full | pdbonly}
其中:
+ | -
指定“+”或只指定 /debug 将使编译器生成调试信息,并将这些信息放置在一个程序数据库(.pdb 文件)中。指定“-”(在不指定 /debug 时有效)则导致不创建调试信息。
full | pdbonly
指定编译器生成的调试信息类型。full 参数在没有指定 /debug:pdbonly 时有效,它允许将调试器附加到正在运行的程序。指定 pdbonly 允许在调试器中启动程序时进行源代码调试,但仅在正在运行的程序附加到调试器时才显示汇编程序。
备注
/debug 选项使编译器生成调试信息并将其放置在输出文件中。使用该选项创建调试版本。如果未指定 /debug、/debug+ 或 /debug:full,则不能调试程序的输出文件。
示例
将调试信息放置在输出文件 app.exe 中:
csc /debug /out:app.exe test.cs
九 /define 定义预处理器符号
/define:name[;name2]
其中:
name,name2
要定义的一个或多个符号的名称。
备注
/define 选项将 name 定义为程序中的符号。它与在源文件中使用 #define 预处理器指令的效果相同。符号一直保持定义到源文件中的 #undef 指令移除定义,或者编译器执行到文件尾。
可以将用该选项创建的符号与 #if、#else、#elif 和 #endif 一起使用,以按条件编译源文件。
/d 是 /define 的缩写形式。
通过使用分号或逗号分隔符号名称,可以使用 /define 定义多个符号。例如:
/define:DEBUG;TUESDAY
示例
// preprocessor_define.cs
// compile with: /define:xx
// or uncomment the next line
// #define xx
using System;
public class Test
{
public static void Main()
{
#if (xx)
Console.WriteLine("xx exists");
#else
Console.WriteLine("xx does not exist");
#endif
}
}
十 /doc 处理 XML 文件的文档注释
/doc:file
其中:
file
XML 的输出文件,由编译的源代码文件中的注释填充。
备注
/doc 选项允许将文档注释放置在 XML 文件中。
对于 Visual Studio .NET,只有 C# 编译器提供此文档注释功能。
在源代码文件中,可处理以下内容之前的文档注释,并将其添加到 XML 文件中:
用户定义的类型,如 class、delegate 或 interface
成员,如字段、事件、属性或方法
包含 Main 的源代码文件首先输出到 XML。
若要将生成的 .xml 文件用于智能感知功能,请使该 .xml 文件的文件名与要支持的程序集同名,然后确保该 .xml 文件放入与该程序集相同的目录中。这样,在 Visual Studio 项目中引用程序集时,也可找到该 .xml 文件。
在使用 /incremental 的编译中将忽略 /doc;使用 /incremental- 以确保 file 是最新的。
除非用 /target:module 进行编译,否则 file 将包含 <assembly></assembly> 标记,以指定包含编译输出文件的程序集清单的文件名。
十一 /filealign 指定输出文件中节的大小
/filealign:number
其中:
number
指定输出文件中节大小的值。有效值为 512、1024、2048、4096 和 8192。这些值以字节为单位。
备注
/filealign 选项使您可以指定输出文件中的节大小。
每个节将在是 /filealign 值的倍数的边界上对齐。没有固定的默认值。如果未指定 /filealign,则公共语言运行库在编译时将选取一个默认值。
通过指定节的大小,可以影响输出文件的大小。修改节的大小可能对将在较小设备上运行的程序有用。
十二 /fullpaths 指定编译器输出中的文件的绝对路径
/fullpaths
备注
默认情况下,编译所产生的错误和警告指定包含错误的文件名。/fullpaths 选项使编译器指定文件的完整路径。
十三 /help
列出编译器选项到 stdout
/help
/?
备注
该选项将编译器选项的列表和每个选项的简短说明发送到 stdout。如果编译中包含该选项,将不会创建输出文件,也不会进行编译。
十四 /incremental 启用源代码文件的增量编译
/incremental[+ | -]
备注
/incremental 编译器选项启用增量编译器,增量编译器仅编译自上次编译后更改的那些方法。先前编译的状态信息存储在由编译器创建的下列文件中:
output_file_name.dbg
使用 /debug 进行编译时,调试信息的状态存储在程序数据库(.pdb 文件)中。
output_file_name.extension.incr
编译状态信息(调试信息除外)存储在 .incr 文件中。
首次使用 /incremental 时,.incr 和 .pdb 文件将更新,并且后面的所有编译都将是增量的。更改以前 /incremental 编译的编译器选项将导致完全重新生成 .incr 和 .pdb 文件。
如果编译器检测到自上次增量编译后有许多更改,它可能执行完全生成,因为完全生成至少与增量编译一样有效。如果编译器无法找到项目的 .pdb 或 .incr 文件,则将发生完全重新生成。
在增量编译中,将忽略 /doc。若要确保文档文件是最新的,请用 /incremental- 生成。
默认情况下,/incremental- 有效。指定 /incremental 与指定 /incremental+ 相同。
用 /incremental 选项创建的输出文件可能比禁用增量编译时创建的输出文件大。由于输出文件会较大,在最后的输出文件生成中应使用 /incremental-。
/incremental 可提高包含许多小文件的项目的编译速度,而对包含有少量大文件的项目,在速度上只有很少或没有提高。
示例
使用增量编译器编译 in.cs:
csc /incremental in.cs
十五 /lib 指定通过 /reference 引用的程序集的位置
/lib:dir1[, dir2]
其中:
dir1
在当前工作目录(调用编译器的目录)或公共语言运行库的系统目录中未找到引用的程序集时,编译器将在其中进行查找的目录。
dir2
要在其中搜索程序集引用的一个或多个附加目录。用分号分隔附加的目录名。
备注
/lib 选项指定通过 /reference 选项引用的程序集的位置。
编译器按以下顺序搜索未完全限定的程序集引用:
当前工作目录。该目录为从其调用编译器的目录。
公共语言运行库系统目录。
由 /lib 指定的目录。
由 LIB 环境变量指定的目录。
使用 /reference 指定程序集引用。
/lib 是累加的;多次指定它可将新的指定追加到任何先前指定的值上。
另一种使用 /lib 的方法是将任何所需的程序集复制到工作目录;这使您得以仅将程序集名称传递给 /reference。然后可以从工作目录中删除这些程序集。由于程序集清单中未指定依赖程序集的路径,因此应用程序可以在目标计算机上启动,然后查找并使用全局程序集缓存中的程序集。
示例
编译 t2.cs 以创建 .exe 文件。编译器将在工作目录和驱动器 C 上根目录中查找程序集引用。
csc /lib:c:/ /reference:t2.dll t2.cs
十六 /linkresource 创建指向托管资源的链接
/linkresource:filename[,identifier]
其中:
filename
要从程序集链接的 .NET Framework 资源文件。
identifier(可选)
资源的逻辑名称;用于加载此资源的名称。默认为文件的名称。
备注
/linkresource 选项在输出文件中创建指向 .NET Framework 资源的链接;资源文件不放在输出文件中。/resource 在输出文件中嵌入资源文件。
当链接的资源是用 C# 编译器创建的时,它在程序集中是公共的。
/linkresource 需要除 /target:module 选项之外的 /target 选项之一。
例如,如果 filename 是通过 Resgen.exe 或在开发环境中创建的 .NET Framework 资源文件,则可以用 System.Resources 命名空间中的成员访问它(有关更多信息,请参见 System.Resources.ResourceManager)。对于所有其它资源,使用 System.Reflection.Assembly 类中的 GetManifestResource* 方法在运行时访问资源。
在 filename 中指定的文件可以为任何格式。例如,您可能会将本机 DLL 设置成程序集的一部分,这样,它就可以安装进全局程序集缓存,并可以由该程序集中的托管代码访问。
/linkres 是 /linkresource 的缩写形式。
示例
编译 in.cs 并链接到资源文件 rf.resource:
csc /linkresource:rf.resource in.cs
十七 /main
指定 Main 方法的位置
/main:class
其中:
class
包含 Main 方法的类型。
备注
如果编译包括多个具有 Main 方法的类型,可以指定哪个类型包含要用作程序入口点的 Main 方法。
此选项用在编译 .exe 文件时。
示例
编译 t2.cs 和 t3.cs,并指定将在 Test2 中找到 Main 方法:
csc t2.cs t3.cs /main:Test2
十八 /noconfig 不要使用 csc.rsp 进行编译
/noconfig
备注
/noconfig 选项通知编译器不要使用 csc.rsp 文件进行编译,该文件与 csc.exe 文件位于同一目录中,并从该目录中加载。csc.rsp 文件引用 .NET Framework 附带的所有程序集。Visual Studio .NET 开发环境包括的实际引用具体取决于项目类型。
可以修改 csc.rsp 文件并指定其它编译器选项,而这些选项是那些应该包括在使用 csc.exe 的来自命令行的每次编译中的选项(/noconfig 选项除外)。
编译器会保留上次传递给 csc 命令的选项。因此,命令行上的任何选项都会重写 csc.rsp 文件中同一选项的设置。
如果不希望编译器查找并使用 csc.rsp 文件中的设置,请指定 /noconfig。
十九 /nologo 取消显示编译器版权标志信息
/nologo
备注
/nologo 选项在编译器启动时取消显示登录版权标志,并在编译期间取消显示信息性消息。
此选项在开发环境中不可用;它仅在从命令行编译时才可用。
二十 /nostdlib 不导入标准库 (mscorlib.dll)
/nostdlib[+ | -]
备注
/nostdlib 选项禁止导入定义整个 System 命名空间的 mscorlib.dll。如果您希望定义或创建自己的 System 命名空间和对象,请使用该选项。
如果不指定 /nostdlib,mscorlib.dll 将导入程序(与指定 /nostdlib- 相同)。如果指定 /nostdlib,则与指定 /nostdlib+ 相同。
二十一 /nowarn
禁用编译器生成指定警告的能力
/nowarn:number1[,number2[...]]
其中:
number1,number2
希望编译器取消的警告编号。
备注
/nowarn 选项使您可以取消编译器生成一个或多个警告的能力。用逗号分隔多个警告编号。
仅需要指定警告标识符的数值部分。例如,若要取消 CS0028,可以指定 /nowarn:28。
编译器在无人参与的模式下忽略传递给 /nowarn 的警告编号,这些警告编号在先前版本中有效但已从编译器中移除。例如,CS0679 在 Visual Studio .NET 2002 中有效但后来被删除。
二十二 /optimize 启用/禁用优化
/optimize[+ | -]
备注
/optimize 选项启用或禁用由编译器执行以使输出文件更小、更快和更有效的优化。/optimize 选项还通知公共语言运行库在运行时优化代码。
默认情况下,/optimize- 有效。指定 /optimize+ 以启用优化。
在生成要由程序集使用的模块时,请使用与该程序集的设置相同的 /optimize 设置。
/o 是 /optimize 的缩写形式。
可以组合 /optimize 和 /debug 选项。
示例
编译 t2.cs 并启用编译器优化:
csc t2.cs /optimize
二十三 /out 指定输出文件
/out:filename
其中:
filename
由编译器创建的输出文件的名称。
备注
在命令行中,可以为编译指定多个输出文件。/out 选项指定输出文件的名称。编译器希望在 /out 选项之后找到一个或多个源代码文件。这样一来,所有的源代码文件都将被编译到 /out 选项所指定的那个输出文件中。
如果不指定输出文件的名称:
.exe 文件将从包含 Main 方法的源代码文件中获取其名称。
.dll 或 .netmodule 文件将从第一个源代码文件中获取其名称。
用于编译一个输出文件的源代码文件不能在相同的编译中用作另一个输出文件的编译。
当在命令行编译中产生多个输出文件时,请记住其中只有一个输出文件可以是程序集并且只有用 /out 隐式或显式指定的第一个输出文件才是程序集。
作为编译的一部分产生的任何模块都变成与编译中产生的所有程序集相关的文件。使用 ildasm.exe 浏览程序集清单以查看相关的文件。
指定要创建的文件的完整名称和扩展名
示例
编译 t.cs 并创建输出文件 t.exe,同时又生成 t2.cs 并创建模块输出文件 mymodule.netmodule:
csc t.cs /out:mymodule.netmodule /target:module t2.cs
二十四 /recurse 搜索子目录中要编译的源文件
/recurse:[dir/]file
其中:
dir(可选)
搜索开始的目录。如果未指定此目录,则搜索从项目目录开始。
file
要搜索的文件。允许使用通配符字符。
备注
/recurse 选项使您可以编译指定目录 (dir) 或项目目录的所有子目录中的源代码文件。
可以在文件名中使用通配符来编译项目目录中所有匹配的文件,而不需使用 /recurse。
示例
编译当前目录中的所有 C# 文件:
csc *.cs
编译 dir1/dir2 目录及其任何子目录中的所有 C# 文件,并生成 dir2.dll:
csc /target:library /out:dir2.dll /recurse: dir1/dir2/*.cs
二十五 /reference 从包含程序集的文件中导入元数据
reference:file[;file2]
其中:
file,file2
一个或多个包含程序集清单的文件。若要导入多个文件,请用逗号或分号分隔文件名。
备注
/reference 选项导致编译器使指定文件中的 public 类型信息可用于当前正在编译的项目。
导入的文件必须包含清单;必须已使用 /target:module 以外的一个 /target 选项编译了输出文件。
使用 /addmodule 从不包含程序集清单的输出文件导入元数据。
运行时,应只期望每个进程加载一个 .exe 程序集,即使在某些情况下可能会在同一进程中加载多个 .exe。因此,不要将用 /target:exe 或 /target:winexe 生成的程序集传递给 /reference。此条件可能会在公共语言运行库的未来版本中得到修改。
如果引用一个程序集(程序集 A),而其本身引用另一个程序集(程序集 B),在下列情况下需要引用程序集 B:
使用来自程序集 A 的类型继承自程序集 B 中的类型或实现程序集 B 中的接口。
如果调用程序集 B 中具有返回类型或参数类型的字段、属性、事件或方法。
使用 /lib 指定一个或多个程序集引用所在的目录。/lib 主题还讨论编译器在哪些目录中搜索程序集。
为了让编译器识别出程序集中的类型(而不是模块),需要强制解析类型,例如可以通过定义此类型的实例来完成。也有其它方法来为编译器解析程序集中的类型名称,例如,如果从一个程序集的类型继承,编译器就会知道此类型名称。
默认情况下,使用 csc.rsp 响应文件,该文件会引用常用的 .NET Framework 程序集。如果不希望编译器使用 csc.rsp,请使用 /noconfig。
/r 是 /reference 的缩写形式。
示例
编译源文件 input.cs 并从 metad1.dll 和 metad2.dll 导入元数据以生成 out.exe:
csc /reference:metad1.dll;metad2.dll /out:out.exe input.cs
二十六 /resource 将 .NET Framework 资源嵌入到输出文件中
/resource:filename[,identifier]
其中:
filename
要在输出文件中嵌入的 .NET Framework 资源文件。
identifier(可选)
资源的逻辑名称;用于加载此资源的名称。默认为文件的名称。
备注
使用 /linkresource 将资源链接到程序集,但不将资源文件放置在输出文件中。
当资源是由 C# 编译器创建的时,它在程序集中是公共的。
例如,如果 filename 是通过 Resgen.exe 或在开发环境中创建的 .NET Framework 资源文件,则可以用 System.Resources 命名空间中的成员访问它(有关更多信息,请参见 System.Resources.ResourceManager)。对于所有其它资源,使用 System.Reflection.Assembly 类中的 GetManifestResource* 方法在运行时访问资源。
/res 是 /resource 的缩写形式。
示例
编译 in.cs 并附加资源文件 rf.resource:
csc /resource:rf.resource in.cs
二十七 /target(指定输出文件格式)
/target 编译器选项可以指定为以下四种形式之一:
/target:exe
创建一个 .exe 文件。
/target:library
创建一个代码库。
/target:module
创建一个模块。
/target:winexe
创建一个 Windows 程序。
如果不指定 /target:module,/target 会将 .NET Framework 程序集清单放置在输出文件中。有关如何指定程序集属性的信息,请参见全局属性。
程序集清单将放置在编译中的第一个 .exe 输出文件中,如果没有 .exe 输出文件,会放置在第一个 .dll 文件中。例如,在以下的命令行中,清单将放置在 1.exe 中:
csc /out:1.exe t1.cs /out:2.netmodule t2.cs
编译器每次编译只创建一个程序集清单。关于编译中所有文件的信息全放在程序集清单中。除用 /target:module 创建的文件之外,所有输出文件都可以包含程序集清单。在命令行生成多个输出文件时,只能创建一个程序集清单,且必须放置在命令行上指定的第一个输出文件中。如果第一个输出文件是一个 exe(/target:exe 或 /target:winexe)或代码库 (/target:library),则在同一次编译中生成的其它任何输出文件必须是模块 (/target:module)。
如果创建了一个程序集,则可以用 CLSCompliant 属性指示全部或部分代码是符合 CLS 的。
// target_clscompliant.cs
[assembly:System.CLSCompliant(true)]
// specify assembly compliance
[System.CLSCompliant(false)]
// specify compliance for an element
class TestClass
{
public static void Main()
{
}
}
二十八 /unsafe 编译使用 unsafe 关键字的代码
备注
/unsafe 选项允许编译使用 unsafe 关键字的代码。
示例
编译不安全模式的 in.cs:
csc /unsafe in.cs
二十九 /utf8output 使用 UTF-8 编码显示编译器输出
/utf8output
备注
/utf8output 选项使用 UTF-8 编码显示编译器输出。
在某些国际配置中,编译器输出无法在控制台上正确显示。在这些配置中,请使用 /utf8output 并将编译器输出复位向到文件。
三十 /warn
设置警告等级
/warn:option
其中:
option
想要为生成显示的最小警告等级。有效值为 0 到 4: 警告等级 意义
0 关闭所有警告消息的显示。
1 显示严重的警告消息。
2 显示等级 1 警告以及某些不太严重的警告,如关于隐藏类成员的警告。
3 显示等级 2 警告以及某些不太严重的警告,如有关总是计算为 true 或 false 的表达式的警告。
4 显示所有等级 3 警告以及信息性警告。这是命令行中的默认警告等级。
备注
/warn 选项指定编译器要显示的警告等级。
生成错误文档描述警告,指示每个警告的等级,并指示可能不能按预期编译的语句的潜在问题(不是实际的编码错误)。
使用 /warnaserror 将所有的警告都视为错误。可以使用 /nowarn 禁用某些警告。
/w 是 /warn 的缩写形式。
示例
编译 in.cs 并让编译器仅显示等级 1 警告:
csc /warn:1 in.cs
三十一 /warnaserror 将警告提升为错误
/warnaserror[+ | -]
备注
/warnaserror+ 选项将所有警告视为错误。将一般报告为警告的任何消息都报告为错误,并且暂停生成过程(不生成输出文件)。
默认情况下 /warnaserror- 有效,它使警告无法阻止输出文件的生成。/warnaserror 与 /warnaserror+ 相同,它使警告被视为错误。
使用 /warn 指定希望编译器显示的警告等级。可以使用 /nowarn 禁用某些警告。
示例
编译 in.cs 并且让编译器不显示警告:
csc /warnaserror in.cs
三十二 /win32icon 将 .ico 文件插入到输出文件中
/win32icon:filename
其中:
filename
要添加到输出文件的 .ico 文件。
备注
/win32icon 选项在输出文件中插入 .ico 文件,.ico 文件赋予输出文件在 Windows 资源管理器中的所需外观。.ico 文件可以用资源编译器创建。编译 Visual C++ 程序时将调用资源编译器;.ico 文件是从 .rc 文件创建的。
示例
编译 in.cs,并附加 .ico 文件 rf.ico 以生成 in.exe:
csc /win32icon:rf.ico in.cs
三十三 /win32res 将 Win32 资源插入到输出文件中
/win32res:filename
其中:
filename
要添加到输出文件的资源文件。
备注
/win32res 选项在输出文件中插入 Win32 资源。Win32 资源文件可以用资源编译器创建。编译 Visual C++ 程序时将调用资源编译器;.res 文件是从 .rc 文件创建的。
Win32 资源可以包含版本或位图(图标)信息,这些信息有助于在 Windows 资源管理器中标识您的应用程序。如果不指定 /win32res,编译器将根据程序集版本生成版本信息。
示例
编译 in.cs,并附加 Win32 资源文件 rf.res 以生成 in.exe:
csc /win32res:rf.res in.cs