C# compiler Command-line options

Contents

Simple compile

Monos C# compiler is fully compatible the the MS compiler and has even the same switches.
// Hello World! : hello.cs

using System;

class Hello {
    static void Main() {
        Console.WriteLine ("Hello, World!");
    }
}

To compile, type
mcs hello.cs
This results in a file hello.exe, that you can execute with mono:
mono hello.exe

Out Parameters

To compile to another filename:
mcs /out:someothername.exe hello.cs

Using Targets

Exe

This is the default and will create a console application.
mcs /target:exe hello.cs

Winexe

This has no effect currently, when used with mono, but this might change, when mono will integrate with GUI filemangers like Nautilus. On the MS .NET Framework this causes the runtime not to open a console window, if not already opened.
mcs /target:winexe hello.cs

Library

to compile a library:
mcs /target:library hello.cs

Module

A module is not a complete application, but only for example one or two classes. Serveral module can be compiled to one application. This is useful if you want to compile one application out of a VB.NET module and a C# module.
mcs /target:module hello.cs

Other Options

--about

Displays information about the Mono C# compiler

-checked, -checked

Sets the default compilation mode to `checked'. This makes all the math operations checked (the default is unchecked).

-checked-

Sets the default compilation mode to `unchecked'. This makes all the math operations unchecked (this is the default).

-codepage:ID

Specifies the code page used to process the input files from the point it is specified on. By default files will be processed in the Latin-1 code page. The compiler will also automatically detect Unicode files that have an embedded byte mark at the beginning. The special ID "utf8" can be used to switch to utf8 and the ID "reset" restores the automatic handling of code pages.

-define:SYMLIST, -d:SYMLIST

Defines the symbol listed by the semi-colon sepa- reted list SYMLIST SYMBOL. This can be tested in the source code by the pre-processor, or can be used by methods that have been tagged with the Con- ditional attribute.

-debug, -debug+, -g

Generate debugging information. The debugging information is stored in a file with the extension .dbg (if you install system wide assemblies, you need to install this file as well). To get stack traces with debugging information, you need to invoke the mono runtime with the `--debug' flag.

-debug-

Do not generate debugging information.

--expect-error X L

The compiler will expect the code to generate an error named `X' in line `L'. This is only used by the test suite.

--fatal

This is used for debugging the compiler. This makes the error emission generate an exception that can be caught by a debugger.

--stacktrace

Generates a stack trace at the time the error is reported, useful for debugging the compiler.

-lib:PATHLIST

Each path specified in the comma-separated list will direct the compiler to look for libraries in that specified path.

-L PAT

Directs the compiler to look for libraries in the specified path. Multiple paths can be provided by using the option multiple times.

-nostdlib, -nostdlib+

Use this flag if you want to compile the core library. This makes the compiler load its internal types from the assembly being compiled.

-noconfig, -noconfig+

Disables the default compiler configuration to be loaded. The compiler by default has references to the system assemblies.

-nowarn:WARNLIST

Makes the compiler ignore warnings specified in the comma-separeted list WARNLIST>

-out:FNAME, -o FNAME

Names the output file to be generated.

--parse

Used for benchmarking. The compiler will only parse its input files.

-resource:RESOURCE[,ID]

Embeds to the given resource file. The optional ID can be used to give a different name to the resource. If not specified, the resource name will be the file name.

-linkresource:RESOURCE[,ID]

Links to the specified RESOURCE. The optional ID can be used to give a name to the linked resource.

-recurse:PATTERN, --recurse PATTERN

Does recursive compilation using the specified pat- tern. In Unix the shell will perform globbing, so you migth want to use it like this: bash$ mcs -recurse:'*.cs'

--timestamp

Another debugging flag. Used to display the times at various points in the compilation process.

-unsafe, -unsafe+

Enables compilation of unsafe code.

-warnaserror, -warnaserror+

Treat warnings as errors.

-warn:LEVEL

Sets the warning level. 0 is the lowest warning level, and 4 is the highest. The default is 2.

-r:ASSEMBLY1[,ASSEMBLY2], -r ASSEMBLY1[,ASSEMBLY2]

Reference the named assemblies. Use this to use classes from the named assembly in your program. The assembly will be loaded from either the system directory where all the assemblies live, or from the path explicitly given with the -L option. You can also use a semicolon to separate the assemblies instead of a comma.

-v

Debugging. Turns on verbose yacc parsing.

--

Use this to stop option parsing, and allow option- looking parameters to be passed on the command line.

A. Credits

Author: Johannes Roith (johannes@jroith.de)