🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Command-line Building With csc.exe 可以通过在命令行上键入 C# 编译器的名为 (csc.exe) 的可执行文件来调用 C# 编译器。 如果您使用 **Visual Studio 命令提示符** 窗口,所有必需的环境变量都将为您设置.在 Windows 7 中,您可以通过打开 **开始** 菜单中的 Microsoft Visual Studio _Version_\Visual Studio Tools 文件夹来访问这个窗口.在 Windows 8 中, Visual Studio 命令行被命名为 **开发者命令提示符 for VS2012**,您可以在开始屏幕搜索到它. 如果使用标准命令提示符窗口,必须调整路径,然后才能从计算机的任何子目录调用 csc.exe。您还必须运行 vsvars32.bat 来设置适当的环境变量以支持命令行构建。有关 vsvars32.bat 内容的详细信息,包括如何找到它以及运行它,请参见 [How to: Set Environment Variables for the Visual Studio Command Line](https://msdn.microsoft.com/zh-cn/library/1700bbwd.aspx). 如果您使用的计算机只安装有 Windows 软件开发包 (SDK),那么您可在**“SDK 命令提示符”**上使用 C# 编译器。SDK 命令提示符可通过**“Microsoft .NET Framework SDK”**菜单选项打开 您也可以使用 MSBuild 通过编程方式生成 C# 程序。有关详细信息,请参阅[MSBuild](https://msdn.microsoft.com/zh-cn/library/dd393574.aspx)。 csc.exe 可执行文件通常位于系统目录下的 Microsoft.NET\Framework\_Version_ 文件夹中。根据每台计算机上的实际配置,此位置可能有所不同。如果在您的计算机上安装了不止一个 .NET Framework 的版本,您将发现此文件的多个版本。有关此类安装的更多信息,请参见[Determining Which Version of the .NET Framework Is Installed](https://msdn.microsoft.com/zh-cn/library/y549e41e.aspx)。 | ![System_CAPS_tip](https://box.kancloud.cn/2016-01-31_56adb6308a05a.jpeg)提示 | | :-- | | 当您使用 Visual Studio IDE 构建项目时,您可以在 **输出** 窗口显示 **csc** 命令以及与之关联的编译器选项.要显示更多的信息,依据指令 [如何:查看、保存和配置生成日志文件](https://msdn.microsoft.com/zh-cn/library/jj651643.aspx) 改变日志数据的冗余版本 -- **常规** 或 **详细**.在您的项目重新生成之后,在 **输出** 窗口中查找 **csc** 以查看所调用的 C# 编译器. | 主题内容 * [命令行语法规则](#vcconcommand-linebuildinganchor1) * [命令行示例](#vcconcommand-linebuildinganchor2) * [C# 编译器和 C++ 编译器输出之间的差异](#vcconcommand-linebuildinganchor3) <a id="vcconcommand-linebuildinganchor1"></a> ## C# 编译器的命令行语法规则 在解释操作系统命令行上给出的参数时,C# 编译器使用下列规则: * 参数用空白分隔,空白可以是一个空格或制表符。 * ^ 字符 (^) 未被识别为转义符或者分隔符。该字符在被传递给程序中的 argv 数组前,由操作系统的命令行分析器进行处理。 * 无论其中是否包含空白,带双引号的字符串 ("string") 均被解释为单个参数。带引号的字符串可以嵌入在参数内。 * 前面有反斜杠的双引号 (\") 被解释为原义双引号字符 (")。 * 反斜杠按其原义解释,除非它们紧位于双引号之前。 * 如果偶数个反斜杠后跟双引号,则每对反斜杠中有一个反斜杠放置在 argv 数组中,而双引号被解释为字符串分隔符。 * 如果奇数个反斜杠后跟双引号,则每对反斜杠中有一个反斜杠放置在 argv 数组中,而双引号由剩余那个反斜杠进行“转义”。这会将双引号字符 (") 添加到 argv 中。 <a id="vcconcommand-linebuildinganchor2"></a> ## C# 编译器的示例命令行 * 编译 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 ``` <a id="vcconcommand-linebuildinganchor3"></a> ## C# 编译器和 C++ 编译器输出之间的差异 由于调用 C# 编译器的结果没有创建目标文件(.obj) ;输出文件被直接创建。 因此,C# 编译器不需要链接器。 ## 请参阅 [C# Compiler Options](https://msdn.microsoft.com/zh-cn/library/2fdbz5xd.aspx) [C# Compiler Options Listed Alphabetically](https://msdn.microsoft.com/zh-cn/library/6ds95cz0.aspx) [C# Compiler Options Listed by Category](https://msdn.microsoft.com/zh-cn/library/6s2x2bzy.aspx) [Main() 和命令行参数(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/acy3edy3.aspx) [命令行参数(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/cb20e19t.aspx) [如何:显示命令行参数(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/96s74eb0.aspx) [如何:使用 foreach 访问命令行参数(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/kztbsa4b.aspx) [Main() 返回值(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/0fwzzxz2.aspx)