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 The C# bindings are currently in BETA state
They should only be used for experimenting and NOT for any product development.
NOTE

Prerequisites

Dependencies

On Linux

You need a compatible version of Mono (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 which accomplishes that using win-builds and MSYS2.

You need a compatible version of Mono (5.0 or higher). You can use Mono binaries installed directly to your Windows system (i.e. outside the MSYS2 environment), you just need to make sure that the paths to the mcs.exe compiler and to the mono.exe application are in the PATH environment variable in your MSYS2 terminal. Using the default installation path, Mono binaries normally go in C:\Program Files\Mono so in MSYS2 you can point to the binaries using the path /c/Program Files/Mono/bin. You can also permanently set this in your /etc/profile in MSYS2 adding something like this at the end of the file:

export PATH="$PATH:/c/Program Files/Mono/bin"

If you used another installation path to Mono just adjust the paths used.

NOTE: It is advisable to add the Mono path at the end of the PATH environment variable, like in the example above. Mono has its own version of some applications (like pkg-config) which can take priority over the ones from MSYS2 and cause things to fail.

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:

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

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:

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:

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:

cp `pkg-config --variable=Libraries efl-mono` .
mono button_example_00.exe

Example setting MONO_PATH:

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:

export PKG_CONFIG_PATH=/opt/my_install_prefix/lib/pkgconfig
export LD_LIBRARY_PATH=/opt/my_install_prefix/lib

Try the Hello World tutorial now to verify that everything works as expected.