How can I compile, run and decompile C# code in Ubuntu terminal?
You need to install mono-complete if you want to run software for Mono or Microsoft .NET which you are not installing from a Debian package.
Install mono-complete. In all currently supported versions of Ubuntu open the terminal and type:
sudo apt install mono-complete
Save your C# code in a file called hello.cs. Example hello.cs code is:
using System; namespace Project_1 { class MainClass { public static void Main (string[] args) { Console.WriteLine ("Hello World!"); Console.ReadKey (); } } }
Make hello.cs executable. Right-click the hello.cs file -> select Properties -> Permissions tab -> put a check mark to the left of Allow executing file as program.
Change directories using the
cd
command to the directory that contains the hello.cs file.Use the mcs compiler and create a Windows executable named hello.exe from the source hello.cs.
mcs -out:hello.exe hello.cs
Run the hello.exe program with mono.
mono hello.exe
The results of running your program in step 6. should be:
Hello World!
Press Enter to exit back to a default terminal prompt.
Decompile the executable file.
monodis --output=decompiled-hello.txt hello.exe
You can use mono
which is C#
implementation, having cross-platform support and is open source.
Open terminal and install mono:
For Ubuntu 20.04 (Stable)
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
For Ubuntu 18.04
sudo apt install apt-transport-https dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu vs-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update
For Ubuntu 16.04
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https
echo "deb https://download.mono-project.com/repo/ubuntu vs-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update
For Ubuntu 14.04
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
sudo apt install apt-transport-https
echo "deb https://download.mono-project.com/repo/ubuntu vs-trusty main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update
Then type
sudo apt install mono-complete
Create a sample C#
file in the current directory
For example you can use the following code:
class GoodDay
{
public static void Main()
{
System.Console.WriteLine("Good Day!");
}
}
Use any text editor like gedit, type the following code and save the file as GoodDay.cs
The command to compile the code -
mcs -out:GoodDay.exe GoodDay.cs
An executable file GoodDay.exe
is generated.
The command to execute the .exe
file -
mono GoodDay.exe
The output will be -
Good Day!
The command to decompile the executable file -
monodis --output=GoodDay.txt GoodDay.exe
The decompiled code information is saved in the newly generated file GoodDay.txt