csc工具一般使用说明zz

csc工具一般使用说明。

工具

CSC.exe是.net用来编译.cs文件的命令工具。它的路径默认在framework安装路径下。如:C:\WINDOWS\Microsoft.NET\Framework\版本\csc.exe

常用的情况如下:

编译 File.cs 以产生 File.exe:
csc File.cs
编译 File.cs 以产生 File.dll:
csc /target:library File.cs
编译 File.cs 并创建 My.exe:
csc /out:My.exe File.cs

编译时添加引用文件:

csc /target:library 1.cs /r System.Data.dll;System.dll

例如:在ADOEF工具生成的CS文件中,因为用了global::命名空间标识符,就没有显示dll的引用。这样如果要生成dll就需要通过/refrence开关。

程序调用

在程序中调用外部运行程序,需要使用 System.Diagnostics.Process System.Diagnostics.ProcessStartInfo两个类。

如:string strCmd = "/t:library /out:" + 输出路径+ " " +输入路径;
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(@"c:\windows\microsoft.net\framework\v3.5\csc.exe",strCmd);

     startInfo.UseShellExecute = false;
      startInfo.CreateNoWindow = true;
      System.Diagnostics.Process.Start(startInfo);

如果需要详细一点的信息。则可以建立一个Process对象,而不是使用静态函数。

如:

             startInfo.UseShellExecute = false;
            startInfo.RedirectStandardInput = true;
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError = true;
            startInfo.CreateNoWindow = true;
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo = startInfo;
            p.Start();
            p.StandardInput.WriteLine(strCmd);
            p.StandardInput.WriteLine("exit");
            string str = p.StandardOutput.ReadToEnd();


msdn:

http://msdn.microsoft.com/zh-cn/library/78f4aasd.aspx

在命令行上使用 csc.exe 生成

更新:2007 年 11 月

可以通过在命令行上键入 C# 编译器的可执行文件 (csc.exe) 的名称来调用 C# 编译器。如果您使用“Visual Studio 命令提示”(以“开始”菜单上“Visual Studio 工具”下的快捷方式提供),则系统已为您设置好所有必要的环境变量。否则,必须调整路径,以便使 csc.exe 可从计算机上的任何子目录中调用。如果不使用“Visual Studio 命令提示”,则必须运行 vsvars32.bat 以设置适当的环境变量来支持命令行生成。有关 vsvars32.bat 的更多信息,请参见如何:设置环境变量

如果您使用的计算机只安装有 Windows 软件开发工具包 (SDK),则可在使用“SDK 命令提示”(可通过“Microsoft .NET Framework SDK”菜单选项访问)时在命令行上使用 C# 编译器。

若要在开发环境中生成,请参见如何:准备和管理生成

也可以使用 MSBuild 通过编程方式生成 C# 程序。有关更多信息,请参见 MSBuild

csc.exe 可执行文件通常位于系统目录下的 Microsoft.NET\Framework\<version> 文件夹中。根据每台计算机上的确切配置,此位置可能有所不同。如果计算机上安装有 .NET Framework 的多个版本,则计算机上将存在此可执行文件的多个版本。有关此类安装的更多信息,请参见安装 .NET Framework 的多个版本

本主题涵盖以下内容:

命令行语法规则

命令行示例

C# 编译器和 C++ 编译器输出之间的差异

在解释操作系统命令行上给出的参数时,C# 编译器使用下列规则:

  • 参数用空白分隔,空白可以是一个空格或制表符。

  • ^ 字符 (^) 未被识别为转义符或者分隔符。该字符在被传递给程序中的 argv 数组前,由操作系统的命令行分析器进行处理。

  • 无论其中是否包含空白,带双引号的字符串 ("string") 均被解释为单个参数。带引号的字符串可以嵌入在参数内。

  • 前面有反斜杠的双引号 (\") 被解释为原义双引号字符 (")。

  • 反斜杠按其原义解释,除非它们紧位于双引号之前。

  • 如果偶数个反斜杠后跟双引号,则每对反斜杠中有一个反斜杠放置在 argv 数组中,而双引号被解释为字符串分隔符。

  • 如果奇数个反斜杠后跟双引号,则每对反斜杠中有一个反斜杠放置在 argv 数组中,而双引号由剩余那个反斜杠进行“转义”。这会将双引号字符 (") 添加到 argv 中。

  • 编译 File.cs 以产生 File.exe:

    csc File.cs
  • 编译 File.cs 以产生 File.dll:

    csc /target:library File.cs
  • 编译 File.cs 并创建 My.exe:

    csc /out:My.exe File.cs
  • 通过使用优化和定义 DEBUG 符号,编译当前目录中的所有 C# 文件。输出为 File2.exe:

    csc /define:DEBUG /optimize /out:File2.exe *.cs
  • 编译当前目录中的所有 C# 文件,以生成 File2.dll 的调试版本。不显示任何徽标和警告:

    csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs
  • 将当前目录中的所有 C# 文件编译为 Something.xyz(一个 DLL):

    csc /target:library /out:Something.xyz *.cs

http://msdn.microsoft.com/zh-cn/library/microsoft.build.tasks.csc_members.aspx

http://www.cnblogs.com/wlc_win/archive/2008/08/18/1270361.html



现在你开发用的计算机可以识别csc.exe了,下一个目标就是使用C#命令行编译器和记事本生成名为TestApp.exe的简单的单文件程序集。首先,需要一些源代码。打开记事本并键入以下内容:

//一个简单的C#应用程序。

using System;

class TestApp

{

public static void Main()

{

    Console.WriteLine"Testing! 1, 2, 3";

}

}

完成后把文件以TestApp.cs的名字保存在一个方便的地方(例如C:\CscExample)。现在,我们来了解C#编译器的核心选项。首先要明白如何指定要创建的程序集的名字和类型(例如,控制台应用程序命名为MyShell.exe,代码库命名为MathLib.dllWindows Forms应用程序命名为MyWinApp.exe等等)。各种选项可以通过将对应的具体标志作为命令行参数传入csc.exe来选择(如表2-2所示)。

为了把TestApp.cs编译成名为TestApp.exe的控制台应用程序,转到包含源代码文件的目录并键入以下命令(注意命令行标志必须位于导入的文件名字前面,不能在后面):

csc /target:exeTestApp.cs

这里没有明确指定/out标志,因而如果TestApp是定义程序入口点(Main()方法)的类,可执行文件将被命名为TestApp.exe。还要清楚的是,大多数C#编译器标志支持缩写版本,例如可以用/t代替/target(程序员可以在命令提示符下键入csc /?来查看所有的缩写):

csc /t:exeTestApp.cs

而且,因为/t:exe标志是C#编译器的默认输出,也可以仅仅通过键入下面的命令来编译TestApp.cs

csc TestApp.cs

2-2C#编译器的输出选项

   

   

/out

本选项用于指定将被构建出的程序集的名字。默认条件下,程序集的名字或者与最初输入的*.cs文件名字相同(生成*.dll文件的情况下),或者与包含程序的Main()方法的那个类型的名字相同(生成*.exe文件的情况下)

/target:exe

本选项构建一个可执行的控制台应用程序。这是默认的文件输出类型,并且在创建该应用程序类型时可被忽略

/target:library

本选项构建一个单一文件*.dll程序集

/target:module

本选项构建一个模块(module)。所谓模块是指组成多文件程序集的元素(详细内容见第11章)

/target:winexe

本选项构建一个可执行的Windows应用程序。尽管使用/target:exe也能创建窗体应用程序,但本选项创建的程序运行时不会有控制窗口出现在桌面背景上

现在TestApp.exe可以从命令行运行了(如图2-1所示)。

2-1.TestApp在运行

引用外部程序集

接下来,让我们考查如何编译一个应用程序,如果它采用了在另一个.NET程序集里定义的类型。说到这里,如果你想知道C#编译器是如何理解对于System.Console类型的引用的,请回忆一下第1章里mscorlib.dll在编译过程期间是如何被自动引用(如果由于特别的原因希望禁用这个功能,可以指定/nostdlib标志)。

为了阐明引用外部程序集的过程,让我们修改TestApp应用程序,显示一个Windows窗体消息框。打开TestApp.cs文件并做如下修改:

using System;

// 一定要加上这一行!

using System.Windows.Forms;

class TestApp

{

public static void Main()

{

    Console.WriteLine"Testing! 1, 2, 3";

        // 一定要加上这一行!

    MessageBox.Show"Hello...";

}

}

注意,对System.Windows.Forms命名空间的引用是通过C#using关键字实现的。回忆一下,如果显式地列出在一个给定的*.cs文件里所用到的命名空间,就可以避免采用完全限定名(否则你会累到手抽筋)。

文本框:图2-2  第一个Windows Forms应用

在命令行中,必须通知csc.exe哪个程序集包含了“所用的”命名空间。假定你已经使用了MessageBox类,必须使用/reference标志指定System.Windows.Forms.dll程序集(/reference标志可以缩写为/r):

csc /r:System.Windows.Forms.dll testapp.cs

如果现在再次运行应用程序,除了控制台输出以外还可以看见图2-2里出现的内容。

使用csc.exe编译多个源文件

TestApp.exe应用程序的当前版本是用单个*.cs源代码文件创建的。在单个的*.cs文件里定义所有.NET类型是完全允许的,然而大多数项目由多个*.cs文件组成,以使代码库更为灵活。假定你又编写了一个类,包含在名为HelloMsg.cs的新文件里:

// HelloMessage类。

using System;

using System.Windows.Forms;

class HelloMessage

{

public void Speak()

{

    MessageBox.Show"Hello...";

}

}

现在,修改初始的TestApp类以使用这种新的类型,并且注释掉以前的Windows窗体代码:

using System;

//不再需要这一行了。

//使用System.Windows.Forms;

class TestApp

{

public static void Main()

{

    Console.WriteLine"Testing! 1, 2, 3";

        // 也不再需要这一行了。

    // MessageBox.Show"Hello...";

        // 练习一下HelloMessage类。

    HelloMessage h = new HelloMessage();

    h.Speak();

}

}

可以通过显式地列出各个导入文件来编译C#文件:

csc /r:System.Windows.Forms.dll testapp.cs hellomsg.cs

另外,C#编译器还允许使用通配符(*)通知csc.exe,包含所有位于项目目录里的*.cs文件作为当前构建的一部分。

csc /r:System.Windows.Forms.dll *.cs

当再次运行程序时,输出完全相同。两个应用程序的唯一差别在于,当前代码分到了多个文件中。

引用多个外部程序集

顺带说明,如果需要csc.exe引用大量的外部程序集会怎样呢?仅需使用一个用分号划界的列表列出各个程序集。对上面这个例子不需要指定多个外部程序集,但我们还是给出一个示例用法:

csc /r:System.Windows.Forms.dll;System.Drawing.dll*.cs


CSC编译选项说明


第一部分:命令介绍。
选项 用途
@ 指定响应文件。
/? 列出编译器选项到 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
posted @ 2011-10-20 12:33  BiG5  阅读(636)  评论(0编辑  收藏  举报