【Ubuntu18.04, C#】UbuntuでC#プログラムをコンパイル・実行したい

#目的
WindowsPCでC#プログラムを作成したが、それをUbuntuの仮想マシンで実行したくなった。
さらにソースコードにちょこちょこ変更を加えながら実行したくもなった。
よってC#プログラムを仮想マシン上でコンパイル・実行だけできるような環境を作ろうとした。

#前提
・Windows10のPCでUbuntu18.04の仮想マシンを作成し、そこで作業

#環境構築手順
###やることの概略
「Mono」という、異なるプラットフォームで動く.NETアプリを作るためのソフトをUbuntuにインストールする。

###手順
1.Ubuntuにログインする。

2.[Mono公式の「Download」のページのLinuxタブを開いたところ](https://www.mono-project.com/download/stable/#download-lin)に実行すべきコマンドが記載されているので、ぞの通りに実行する。
記事執筆時点でのコマンドは以下の通りであった。

```
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-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
```
　 

サイトはこんな感じになっている↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424306/8a5b7e52-ab1b-847d-728d-83b7d8d817fc.png)

　
で、自身は1行目の「sudo apt install gnupg ca-certificates」で早速こけた。

```
root@ubuntu-VirtualBox:/home/ubuntu# apt install gnupg ca-certificate
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package ca-certificate
```
　
この場合は、「apt install gnupg ca-certificate」する前に「apt-get update」する必要があるのだそう
（[askubuntuの:"Ubuntu Docker Container update-ca-certificates: command not found"](https://askubuntu.com/questions/792354/ubuntu-docker-container-update-ca-certificates-command-not-found)より）。
で、その通りにやってみたらうまくいった↓

コマンド実行し直し・・・

```
sudo apt-get update
sudo apt install gnupg ca-certificates
```
結果は？

```
root@ubuntu-VirtualBox:/home/ubuntu# apt install gnupg ca-certificates
Reading package lists... Done
Building dependency tree       
Reading state information... Done
ca-certificates is already the newest version (20180409).
gnupg is already the newest version (2.2.4-1ubuntu1.2).
0 upgraded, 0 newly installed, 0 to remove and 15 not upgraded.
```
　

3.以下のコマンドを実行してMonoをインストール。
しばらくログがだ～っと出力されて、いつの間にかインストールが終わる。

```
sudo apt install mono-devel
```
　

4.monoコマンドが使えるようになっているか確認するため、「mono --version」を実行する。
以下のような感じに出力されればOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424306/83b22724-119e-3c8f-eeef-033591cadae0.png)


#コンパイル・実行の動作確認
適当な場所に簡単なC#ソースコードを作成して試してみる。
今回は「/home/[ユーザ名]/」配下に「Sources」ディレクトリを作り、その中にソースコードを置くことにした。

1.ディレクトリを移動してからviコマンドで新規ファイルを.cs拡張子で作り・・・

```
cd /home/[ユーザ名]/Sources
vi Hello.cs
```
　

2.手抜きコードを書いて保存して閉じる

```cs
using System;

namespace Hello
{
    class HelloWorld
    {
        static void Main()
        {
            Console.WriteLine("Hello World!!");
            Console.ReadLine();
        }
    }
}
```

　
3.以下のコマンドを実行してソースコードをコンパイルする。

```
mcs Hello.cs
```
コマンド実行後に現在のディレクトリを見てみると、新たにソースコードのファイル名と同名のexeファイルが作られていることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424306/860854c6-270e-3cdf-ba15-1909f42cabdd.png)

　
4.そしていよいよexeファイルを実行する

```
mono Hello.exe
```
ざわざわ・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424306/92d64755-1dec-5b8b-9c97-d41340392aa8.png)


（(ﾟ∀ﾟ)）


#参考にさせて頂いたサイト

・[Monoの公式サイト](https://www.mono-project.com/download/stable/#download-lin)
・[LinuxでもC#プログラミング(導入編)](https://www.casleyconsulting.co.jp/blog/engineer/181/)

#追記（2020/01/25）
「コンパイル・実行の動作確認」の手順3に誤りがある旨をご指摘頂きましたので、修正しました。
実行コマンドが"msc"となっていましたが、正しくは"mcs"です。
これまで読んでいただいた方にはご迷惑をおかけしました。