The Mono framework is an open source implementation of Microsoft’s .NET Framework. It allows developers to build cross-platform .NET applications that can run on Linux, macOS, and Windows.
In this guide, we will walk through installing Mono on a Raspberry Pi. This will allow you to run .NET applications and frameworks like ASP.NET on your Raspberry Pi.
Key Takeaways
- The Mono project allows running .NET applications on Linux and ARM devices like Raspberry Pi
- Use the Mono APT repo to easily install Mono and NuGet on Raspberry Pi
- Mono runtime and compilers like JIT are included in the mono-complete package
Table of Contents
Prerequisites
Before installing Mono, make sure your Raspberry Pi is up to date by running:
sudo apt update
sudo apt full-upgrade
You’ll also need about 145MB of free disk space to install Mono and its dependencies.
How to Install Mono on Raspberry Pi?
Step 1 – Add the Mono Repository
First, we need to add the Mono APT repository to get access to the Mono packages:
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/debian stable-raspbianbullseye main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
Update your package list after adding the repo:
sudo apt update
Step 2 – Install Mono
With the repository enabled, install Mono with:
sudo apt install mono-complete
This will install the mono-complete package and all its dependencies, including the Mono runtime, JIT compiler, tools, and libraries.
Verify Mono is installed properly by checking the version:
mono --version
Step 3 – Install NuGet (Optional)
To install .NET libraries and frameworks, you’ll likely want to install NuGet.
NuGet is a package manager for .NET similar to pip for Python. You can skip this step if you don’t plan to use NuGet right away.
To install NuGet, run:
sudo apt install nuget
With Mono and NuGet installed, you can now run .NET applications on your Raspberry Pi!
Conclusion
Installing Mono on a Raspberry Pi helps unlock the full potential of .NET for lightweight, cross-platform applications. With Mono installed, developers can take advantage of mature .NET ecosystems like ASP.NET, Xamarin, and Unity on Raspberry Pi.
This guide walked through getting a Mono environment set up on Raspberry Pi that is ready to build and run .NET apps. Be sure to check out Microsoft’s documentation for more examples of running .NET workloads on Linux and ARM devices.
FAQS
What CLI text editors work well with Mono development on Raspberry Pi?
Lightweight text editors like Nano and Vi work well for Mono dev on Raspberry Pi. Visual Studio Code also runs nicely.
What GPIO libraries are available for using Raspberry Pi pins in Mono?
Libraries like RPi.GPIO and Unosquare provide .NET APIs for Raspberry Pi GPIO in Mono.
Is there sample code for accessing the camera module with Mono?
Yes, the Raspberry Pi foundation provides CameraSample code showing how to use Mono to access the camera module.
Can I use C# 8 features with Mono on Raspberry Pi
Currently Mono 6.12 supports up to C# 8 features like async streams and nullable reference types.
Does Mono run on the latest 64-bit Raspberry Pi OS?
Yes, Mono works on the 64-bit Raspberry Pi OS versions that are now available.
Where are Mono binaries and libraries installed on Raspberry Pi?
Mono installs to standard system locations like /usr/bin/ and /usr/lib/mono/.
Can I target ARM32 or ARM64 with Mono?
Yes, you can compile .NET applications for either 32-bit or 64-bit ARM with Mono’s tools.
Is Xamarin for mobile development included in mono-complete?
No, Xamarin SDKs are separate add-ons. But you can interface with mobile apps using HTTP APIs.
How do I uninstall Mono from my Raspberry Pi?
Use sudo apt purge mono-complete to fully remove Mono and clean up dependencies.
Can I run .NET 5 or .NET 6 with Mono on Raspberry Pi?
Mono 6 supports .NET 5. .NET 6 should work with the experimental Mono 7 preview.
Is Blazor WebAssembly supported on Mono and Raspberry Pi?
Yes, Blazor WebAssembly runs nicely on Raspberry Pi using Mono to run .NET code client-side.
Are there good GPU acceleration libraries for Mono and RPi?
SDL2 provides good GPU accelerated graphics, there are also OpenCL and Vulcan bindings available.
Where can I find examples of Mono touchscreen GUI apps?
The Unosquare Raspberry Pi GUI repo has nice touchscreen app examples using Mono.
Can I cross compile .NET apps for Raspberry Pi on my desktop?
Yes, you can absolutely use msbuild to cross compile .NET apps for ARM boards like RPi.
What real-time functionality does Mono support?
Mono provides real-time extensions for low-latency audio, GC pauses, and fast messaging.
Can I use Python or Ruby together with Mono on Raspberry Pi?
Yes, multiple languages can be used together on RPi. Python works great with Mono.
What IoT protocols work with Mono on Raspberry Pi?
Mono has Modbus, MQTT, OPC UA and other industrial IoT protocol libraries available.
Is Mono supported on ARM chips like new Apple Silicon Macs?
Yes, Mono works great on Apple M1 and M2 ARM-based macOS machines.
Can Windows Forms applications run on Mono Raspberry Pi?
Yes, Windows Forms apps are supported by Mono out of the box.
Are math intensive applications practical with Mono on RPi?
For moderate math Mono works OK, but may want a Pi 4 or Compute Module for heavy number crunching.