Dela via


Command-line Building With csc.exe

You can invoke the C# compiler by typing the name of its executable file (csc.exe) on the command line. If you use the Visual Studio Command Prompt (available as a shortcut on the start menu under Visual Studio Tools), all the necessary environment variables are set for you. Otherwise, you must adjust your path in order to enable csc.exe to be invoked from any subdirectory on your computer. If you do not use the Visual Studio Command Prompt, you must run vsvars32.bat to set the appropriate environment variables to support command line builds. For more information about vsvars32.bat, see How to: Set Environment Variables.

If you are working on a computer that only has the Windows Software Development Kit (SDK), you can use the C# compiler at the command line if you use the SDK Command Prompt, which is available from the Microsoft .NET Framework SDK menu option.

To build from the development environment, see How to: Prepare and Manage Builds.

You can also use MSBuild to programmatically build C# programs. For more information, see MSBuild.

The csc.exe executable is usually located in the Microsoft.NET\Framework\<version> folder under the system directory. Its location may vary depending on the exact configuration on any individual computer. Multiple versions of this executable will be present on the computer if more than one version of the .NET Framework is installed on the computer. For more information about such installations, see Determining Which Version of the .NET Framework Is Installed.

This topic covers the following:

Rules for Command-Line Syntax

Sample Command Lines

Differences Between C# Compiler and C++ Compiler Output

Rules for Command-Line Syntax for the C# Compiler

The C# compiler uses the following rules when it interprets arguments given on the operating system command line:

  • Arguments are delimited by white space, which is either a space or a tab.

  • The caret character (^) is not recognized as an escape character or delimiter. The character is handled by the command-line parser in the operating system before it is passed to the argv array in the program.

  • A string enclosed in double quotation marks ("string") is interpreted as a single argument, regardless of white space that is contained within. A quoted string can be embedded in an argument.

  • A double quotation mark preceded by a backslash (\") is interpreted as a literal double quotation mark character (").

  • Backslashes are interpreted literally, unless they immediately precede a double quotation mark.

  • If an even number of backslashes is followed by a double quotation mark, one backslash is put in the argv array for every pair of backslashes, and the double quotation mark is interpreted as a string delimiter.

  • If an odd number of backslashes is followed by a double quotation mark, one backslash is put in the argv array for every pair of backslashes, and the double quotation mark is "escaped" by the remaining backslash. This causes a literal double quotation mark (") to be added in argv.

Sample Command Lines for the C# Compiler

  • Compiles File.cs producing File.exe:

    csc File.cs 
    
  • Compiles File.cs producing File.dll:

    csc /target:library File.cs
    
  • Compiles File.cs and creates My.exe:

    csc /out:My.exe File.cs
    
  • Compiles all the C# files in the current directory, with optimizations on and defines the DEBUG symbol. The output is File2.exe:

    csc /define:DEBUG /optimize /out:File2.exe *.cs
    
  • Compiles all the C# files in the current directory producing a debug version of File2.dll. No logo and no warnings are displayed:

    csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs
    
  • Compiles all the C# files in the current directory to Something.xyz (a DLL):

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

Differences Between C# Compiler and C++ Compiler Output

There are no object (.obj) files created as a result of invoking the C# compiler; output files are created directly. As a result of this, the C# compiler does not need a linker.

See Also

Reference

C# Compiler Options Listed Alphabetically

C# Compiler Options Listed by Category

Other Resources

C# Compiler Options