--- ~~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.