How to run your Monogame app on a Raspberry Pi (or any Linux)
Tags: monogame, gamedev, raspberrypi, csharp
Published: 2021-01-25 17:44:17

If you are here you probably have a **Windows** game developed using
**Monogame** that you would like to port to a **Raspberry Pi** device with
Raspberry Pi OS (*Raspbian*). Or even, to any Linux distribution. Well, you are
in the right place. This mini-tutorial will cover all the steps to run your game
on it.

#### Requirements

Before starting to get your hands on the task you must comply with these
requirements to maximize compatibility and to be up-to-date.

* **Monogame 3.8 **(it could run on older versions but not tested)
* Your game using **.Net Core 3** or *newer*
* Your game and assets built with target **DesktopGL**
* **Raspberry Pi 2** or *newer (dotnet can publish only on newer devices and not
on the original RPi)*

#### How to do it

We are going to use our videogame Zombusters that is #*OpenSource* as an example
of a real project working.

1.  **Clone the Game Repository**

> git clone
> [https://github.com/retrowax/Zombusters.git](https://github.com/retrowax/Zombusters.git)

2. **Download and install .NET Core 3.1 SDK**

In this case, at the moment we are still using .NET Core 3.1 but it would be the
same for the latest version 5.0. Here you will find the SDK:

> [https://dotnet.microsoft.com/download/dotnet-core/3.1](https://dotnet.microsoft.com/download/dotnet-core/3.1)

We need to download the **Arm32** version because Raspberry Pi OS is still
**32bit**.

> wget
> [https://download.visualstudio.microsoft.com/download/pr/2178c8a1-ad48-4e51-9ddd-4e3ab64d1f0e/68746abefadf62be43ca525653c915a1/dotnet-sdk-3.1.405-linux-arm.tar.gz](https://download.visualstudio.microsoft.com/download/pr/2178c8a1-ad48-4e51-9ddd-4e3ab64d1f0e/68746abefadf62be43ca525653c915a1/dotnet-sdk-3.1.405-linux-arm.tar.gz)

Now we need to uncompress the file and install it on our path:

> mkdir -p “$HOME/dotnet” && tar zxf dotnet-sdk-3.1.405-linux-arm.tar.gz -C
> “$HOME/dotnet”

> export DOTNET_ROOT=$HOME/dotnet

> export PATH=$PATH:$HOME/dotnet

If you want **.NET Core** to still work after restarting the system you would
need to do this:

> sudo vi /etc/profile

Add these lines at the bottom of the file and save it, use your editor of choice
I used vi.

> *export DOTNET_ROOT=$HOME/dotnet*

> *export PATH=$PATH:$HOME/dotnet*

3. **Build the Game Solution**

Now is time to build the solution but first, we need to download the required
**Nuget dependencies** included on the solution before we could build it.

> dotnet restore ZombustersLinux.sln

Then, build the **Debug** flavor:

> dotnet msbuild ZombustersLinux.sln

Now you would like to make changes to your solution in order to adapt it or
solve eventual issues with your solution being migrated to your Raspberry Pi.

If the build runs without errors, it generates a **dll** with the **debug**
build that could be executed with this command (the path is where your solution
files were generated):

> dotnet
> /home/pi/Documents/github/Zombusters/ZombustersWindows/bin/Debug/netcoreapp3.1/ZombustersLinux.dll

**Note:** *if is the first time migrating to a Linux environment it would be
possible that your Content Load paths could be wrong and could generate errors
when building.*

And that’s it! You will have now your game up and running on your Raspberry Pi.

This process could be used to execute it on other Linux distributions, you only
need to download the correct arch for the .NET Core SDK.

Finally, if you would like to try **Zombusters** on your Raspberry Pi, you can
download it for **FREE** here:

[https://retrowax.itch.io/zombusters-raspberry-pi-edition](https://retrowax.itch.io/zombusters-raspberry-pi-edition)

In the next posts, we will cover the ways to create a **Release build** and the
best options to **distribute it**.

Stay tuned!