Ubuntuで動くMonoという.NetFrameworkの動作環境を構築すると、.NetFrameworkを使ったC#のプログラムがUbuntuで動作するらしいので試してみます。
導入
ターミナルを起動し公式サイトの手順を実行します。
Ubuntu 20.04
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
Ubuntu 18.04
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
引用元:Mono公式サイト
私の環境はUbuntu 19.10でMonoの公式サイトの説明は18.4でしたがとりあえずaptでインストールできるようになりました。
次にmonoをインストールします。
sudo apt install mono-devel
これでインストールできるようになったはず。
試しに以下のソースをコンパイルしてみます。
ファイル名:hello.cs
using System;
class Prog
{
static void Main()
{
Console.WriteLine("Hello World!!");
}
}
コンパイル
mcs hello.cs
成功するとhello.exeが出来上がります。
実行
mono hello.exe
Hello World!!
成功しました。
Ubuntuで.exeファイルが実行しているのを見ると少し奇妙な感じがします。
この.exeファイルはWindows10にコピーしたら実行できるのでしょうか?気になります。
今後は、いろいろなC#のソースファイルをコンパイルしてみたいと思います。
.NetFrameworkを使ったプログラムは動作します。ConsoleやWinFroms(多分Classlibも)動作しますがWPFは無理そうです。
追記:20250205
最近Ubuntuを本格的にDesktopOSとして使おうかと思っております。
それで、WindowsとUbuntuで両方とも使えるGUIアプリを作ろうかと思い、Monoを思い出しました。
monoをUbuntu22.04へインストールしてみました。とりあえず20.04の手順でインストールは成功。
こちらの記事を書いている時点でも古いと思っていましたが、個人で動かす分には問題無いと思います。
出来ることと問題点としては、NuGetなどのでインストール出来るライブラリは多分monoを想定していないと思われるので、標準でインストールされた.Net Frameworkのライブラリのみということに成ります。Cなどから呼び出せるLinuxのライブラリも使えますが、それだとWindowsでは動かないと思われます。WindowsとLinuxでコードを分けて対応すれば行けるのかもしれませんが、面倒そうです。
MonoDevelopというIDE環境もあったらしいのですが、今は開発されておらずVisual Studio Codeを使ってくれとのこと。
デバック環境を作るのは難しそうなので、Debug.Print()を駆使して何とかできる、コード量が少なめのプログラムになりそうです。Debug.Print()の出力先はテキストファイルなどに出来ればなんとかなりそうです。
開発環境をWindowsのVisualStudio 2022やVisualStidoCodeなどを使う方法考えられますが、既存の.NET環境が壊れるリスクは避けたいところです。
そうなるとWindows10(多分Windows11)の標準でインストールされている、csc.exeを使えば行けるかと思いましたが、C#のバージョンが5のようです。そうなると.Net Frameworkのバージョンは4.6とかそのあたり。
monoを調べたところのC#のバージョンは8.0で.Net Frameworkのバージョンが4.8とのこと、こちらの方が新しい。
コメント