---
~~Title: Setting Up a C# Development Environment~~
---
# Setting Up a C# Development Environment #
This page shows how to compile and install the Enlightenment Foundation Libraries (EFL) with C# bindings support, and explains how to build and run applications using them.
| | WARNING | |
| --- | ------- | --- |
| ![NOTE](/_media/note-important.png) | **Some C# classes are currently in BETA state**
They should only be used for experimenting and **NOT** for any product development.
These classes are marked as **BETA** in the reference documentation. | ![NOTE](/_media/note-important.png) |
## Prerequisites ##
* Before you start you may want to read about [how to compile the EFL](https://www.enlightenment.org/docs/distros/start).
## Dependencies ##
### On Linux ###
You need a compatible version of [Mono](http://www.mono-project.com/download/stable) (5.0 or higher).
> **NOTE:**
> Currently the C# bindings do **NOT** work with Mono 4.x.
The paths to the ``mcs`` compiler and to the ``mono`` application must be in the ``PATH`` environment variable before compiling.
### On Windows ###
In order to have EFL on a Windows environment we highly recommend following [this guide](/docs/distros/windows-start.md) which accomplishes that using [MSYS2](http://www.msys2.org) and [ewpi](https://github.com/vtorri/ewpi).
You need a compatible version of [Mono](http://www.mono-project.com) (5.0 or higher). It suffices to install it with *pacman* in the MSYS2 environment:
```
pacman -S mingw-w64-x86_64-mono
```
Now you can use the MSYS2 console to compile, install and run EFL and your applications.
## Compiling and Installing EFL With C# Support ##
In order to compile and install EFL with C# binding support, on both Windows and Linux, just compile the EFL like the respective guides explain, and add the argument ``--enable-csharp-bindings`` to the ``autogen.sh`` or ``configure`` command:
```bash
./autogen.sh --enable-csharp-bindings #other arguments
make -j4
sudo make install
```
> **NOTE:**
> It is known that some portions of the code (typically the examples) can get a bit outdated from time to time, causing the building process to fail. The leading cause for this is a missing dependency.
> Usually, reading the error message and installing the missing package solves the problem.
> If you cannot solve the problem by yourself, try [contacting the community](/contact).
> **NOTE**
> If you are using Visual Studio to write EFL C# applications, you should copy to the build directory or have them in the `PATH` environment libraries: `libeflcustomexportsmono.dll`, `libefl_mono.dll` and if you want to use Intellisense also `libefl_mono.xml`. These libraries and XML file will be found at lib sub-directory of the prefix you install the library.
## Building EFL C# Applications ##
With EFL installed, you can compile EFL applications using ``pkg-config`` to get the proper flags to use the C# bindings:
```bash
mcs your_app.cs -out:your_app.exe `pkg-config --libs efl-mono`
```
Otherwise, you have to manually point the compiler to the location of the EFL C# bindings library ``libefl_mono.dll``, like this:
```bash
mcs your_app.cs -out:your_app.exe -r:/home/my_user/efl/build/src/lib/efl_mono/libefl_mono.dll
```
## Running EFL C# Applications ##
To run your application you can either copy the EFL C# bindings library ``libefl_mono.dll`` to your application folder or set the ``MONO_PATH`` environment variable and then execute it using ``mono``. In both cases, you can use ``pkg-config`` to get the right paths.
Example copying the library:
```bash
cp `pkg-config --variable=Libraries efl-mono` .
mono button_example_00.exe
```
Example setting ``MONO_PATH``:
```bash
export MONO_PATH=`pkg-config --variable=assemblies_dir efl-mono`
mono button_example_00.exe
```
Note that if you installed EFL in a path that is not directly accessible to ``pkg-config`` or to your application you have to manually make it accessible somehow, for example, setting proper environment variables before compiling and running:
```bash
export PKG_CONFIG_PATH=/opt/my_install_prefix/lib/pkgconfig
export LD_LIBRARY_PATH=/opt/my_install_prefix/lib
```
Try the [Hello World](/develop/tutorials/csharp/hello-world-cs.md) tutorial now to verify that everything works as expected.