Monoは、オープンソースの.NET互換環境。
GitHub - mono/mono: Mono open source ECMA CLI, C# and .NET implementation.
Home | Mono
LinuxでC#などの.NETのプログラムを動かすには、これを使う。
mono-develのインストール。
$ sudo yum install mono-devel [sudo] bg1 のパスワード: メタデータの期限切れの最終確認: xx:xx:xx 時間前の xxxx年xx月xx日 xx時xx分xx秒 に実施しました。 依存関係が解決しました。 ================================================================================ パッケージ アーキテクチャー バージョン リポジトリ サイズ ================================================================================ インストール: mono-devel x86_64 4.8.0-12.fc28 fedora 5.3 M 依存関係をインストール中: libgdiplus x86_64 5.6-2.fc29 fedora 176 k mono-core x86_64 4.8.0-12.fc28 fedora 18 M mono-data x86_64 4.8.0-12.fc28 fedora 4.4 M mono-data-sqlite x86_64 4.8.0-12.fc28 fedora 103 k mono-extras x86_64 4.8.0-12.fc28 fedora 465 k mono-mvc x86_64 4.8.0-12.fc28 fedora 484 k mono-wcf x86_64 4.8.0-12.fc28 fedora 946 k mono-web x86_64 4.8.0-12.fc28 fedora 2.5 M mono-winforms x86_64 4.8.0-12.fc28 fedora 1.6 M monodoc x86_64 4.8.0-12.fc28 fedora 19 M トランザクションの概要 ================================================================================ インストール 11 パッケージ ダウンロードサイズの合計: 53 M インストール済みのサイズ: 129 M これでよろしいですか? [y/N]: y パッケージのダウンロード中です: (1/11): libgdiplus-5.6-2.fc29.x86_64.rpm 90 kB/s | 176 kB 00:01 (2/11): mono-data-sqlite-4.8.0-12.fc28.x86_64.r 67 kB/s | 103 kB 00:01 (3/11): mono-data-4.8.0-12.fc28.x86_64.rpm 602 kB/s | 4.4 MB 00:07 (4/11): mono-extras-4.8.0-12.fc28.x86_64.rpm 83 kB/s | 465 kB 00:05 (5/11): mono-devel-4.8.0-12.fc28.x86_64.rpm 478 kB/s | 5.3 MB 00:11 (6/11): mono-mvc-4.8.0-12.fc28.x86_64.rpm 125 kB/s | 484 kB 00:03 (7/11): mono-core-4.8.0-12.fc28.x86_64.rpm 1.1 MB/s | 18 MB 00:17 (8/11): mono-wcf-4.8.0-12.fc28.x86_64.rpm 230 kB/s | 946 kB 00:04 (9/11): mono-winforms-4.8.0-12.fc28.x86_64.rpm 523 kB/s | 1.6 MB 00:03 (10/11): mono-web-4.8.0-12.fc28.x86_64.rpm 573 kB/s | 2.5 MB 00:04 (11/11): monodoc-4.8.0-12.fc28.x86_64.rpm 1.7 MB/s | 19 MB 00:11 -------------------------------------------------------------------------------- 合計 1.7 MB/s | 53 MB 00:31 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 Installed: libgdiplus-5.6-2.fc29.x86_64 インストール中 : libgdiplus-5.6-2.fc29.x86_64 1/11 scriptletの実行中: libgdiplus-5.6-2.fc29.x86_64 1/11 Installed: libgdiplus-5.6-2.fc29.x86_64 Installed: mono-data-sqlite-4.8.0-12.fc28.x86_64 インストール中 : mono-data-sqlite-4.8.0-12.fc28.x86_64 2/11 Installed: mono-data-sqlite-4.8.0-12.fc28.x86_64 Installed: mono-extras-4.8.0-12.fc28.x86_64 インストール中 : mono-extras-4.8.0-12.fc28.x86_64 3/11 Installed: mono-extras-4.8.0-12.fc28.x86_64 Installed: mono-data-4.8.0-12.fc28.x86_64 インストール中 : mono-data-4.8.0-12.fc28.x86_64 4/11 Installed: mono-data-4.8.0-12.fc28.x86_64 Installed: mono-mvc-4.8.0-12.fc28.x86_64 インストール中 : mono-mvc-4.8.0-12.fc28.x86_64 5/11 Installed: mono-mvc-4.8.0-12.fc28.x86_64 Installed: mono-wcf-4.8.0-12.fc28.x86_64 インストール中 : mono-wcf-4.8.0-12.fc28.x86_64 6/11 Installed: mono-wcf-4.8.0-12.fc28.x86_64 Installed: mono-web-4.8.0-12.fc28.x86_64 インストール中 : mono-web-4.8.0-12.fc28.x86_64 7/11 Installed: mono-web-4.8.0-12.fc28.x86_64 Installed: mono-core-4.8.0-12.fc28.x86_64 インストール中 : mono-core-4.8.0-12.fc28.x86_64 8/11 Installed: mono-core-4.8.0-12.fc28.x86_64 Installed: mono-winforms-4.8.0-12.fc28.x86_64 インストール中 : mono-winforms-4.8.0-12.fc28.x86_64 9/11 Installed: mono-winforms-4.8.0-12.fc28.x86_64 Installed: monodoc-4.8.0-12.fc28.x86_64 インストール中 : monodoc-4.8.0-12.fc28.x86_64 10/11 Installed: monodoc-4.8.0-12.fc28.x86_64 Installed: mono-devel-4.8.0-12.fc28.x86_64 インストール中 : mono-devel-4.8.0-12.fc28.x86_64 11/11 scriptletの実行中: mono-devel-4.8.0-12.fc28.x86_64 11/11 Installed: mono-devel-4.8.0-12.fc28.x86_64 検証 : libgdiplus-5.6-2.fc29.x86_64 1/11 検証 : mono-core-4.8.0-12.fc28.x86_64 2/11 検証 : mono-data-4.8.0-12.fc28.x86_64 3/11 検証 : mono-data-sqlite-4.8.0-12.fc28.x86_64 4/11 検証 : mono-devel-4.8.0-12.fc28.x86_64 5/11 検証 : mono-extras-4.8.0-12.fc28.x86_64 6/11 検証 : mono-mvc-4.8.0-12.fc28.x86_64 7/11 検証 : mono-wcf-4.8.0-12.fc28.x86_64 8/11 検証 : mono-web-4.8.0-12.fc28.x86_64 9/11 検証 : mono-winforms-4.8.0-12.fc28.x86_64 10/11 検証 : monodoc-4.8.0-12.fc28.x86_64 11/11 インストール済み: mono-devel-4.8.0-12.fc28.x86_64 libgdiplus-5.6-2.fc29.x86_64 mono-core-4.8.0-12.fc28.x86_64 mono-data-4.8.0-12.fc28.x86_64 mono-data-sqlite-4.8.0-12.fc28.x86_64 mono-extras-4.8.0-12.fc28.x86_64 mono-mvc-4.8.0-12.fc28.x86_64 mono-wcf-4.8.0-12.fc28.x86_64 mono-web-4.8.0-12.fc28.x86_64 mono-winforms-4.8.0-12.fc28.x86_64 monodoc-4.8.0-12.fc28.x86_64 完了しました! $
MainClass.csで、
Console.WriteLineで文字列出力だけ。
mono - Mono Documentation
(HTTP500エラーでリンク切れてる?)
mono/Console.cs at master · mono/mono · GitHub
$ vi MainClass.cs $ mcs MainClass.cs Unhandled Exception: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542 at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x0002b] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoReader..ctor (System.String term, System.String filename) [0x00065] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoDriver..ctor (System.String term) [0x00058] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver..cctor () [0x00062] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x0000a] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.Console..cctor () [0x000a8] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at Mono.CSharp.Driver.Main (System.String[] args) [0x00019] in <6c6b2f38a076460eacf227054ff6f99a>:0 [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542 at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x0002b] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoReader..ctor (System.String term, System.String filename) [0x00065] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoDriver..ctor (System.String term) [0x00058] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver..cctor () [0x00062] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x0000a] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.Console..cctor () [0x000a8] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at Mono.CSharp.Driver.Main (System.String[] args) [0x00019] in <6c6b2f38a076460eacf227054ff6f99a>:0 $
意味不明のExceptionが出る。
mcs自体がおかしい模様。
Can't install Mono from Mono repo for Fedora 29 · Issue #11937 · mono/mono · GitHub
これかなあ・・・。
Fedora28のRPM入れてみろってある・・・。
ここにも、「compat-giflibが~」とある。
やってみる。
$ pwd /home/bg1/project/local/fedora29vm/tmp $ wget https://rpmfind.net/linux/fedora/linux/releases/28/Everything/x86_64/os/Packages/c/compat-giflib-4.1.6-1.fc28.x86_64.rpm --2019-06-15 11:44:54-- https://rpmfind.net/linux/fedora/linux/releases/28/Everything/x86_64/os/Packages/c/compat-giflib-4.1.6-1.fc28.x86_64.rpm rpmfind.net (rpmfind.net) をDNSに問いあわせています... 195.220.108.108 rpmfind.net (rpmfind.net)|195.220.108.108|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 26540 (26K) [application/x-rpm] `compat-giflib-4.1.6-1.fc28.x86_64.rpm' に保存中 compat-giflib-4.1.6 100%[===================>] 25.92K 93.3KB/s 時間 0.3s 2019-06-15 11:44:56 (93.3 KB/s) - `compat-giflib-4.1.6-1.fc28.x86_64.rpm' へ保存完了 [26540/26540] $ sudo dnf install compat-giflib-4.1.6-1.fc28.x86_64.rpm [sudo] bg1 のパスワード: Fedora Modular 29 - x86_64 4.7 kB/s | 7.4 kB 00:01 Fedora Modular 29 - x86_64 - Updates 4.6 kB/s | 7.3 kB 00:01 Fedora 29 - x86_64 - Updates 5.5 kB/s | 8.0 kB 00:01 Fedora 29 - x86_64 5.2 kB/s | 7.5 kB 00:01 依存関係が解決しました。 ================================================================================ パッケージ アーキテクチャー バージョン リポジトリ サイズ ================================================================================ インストール: compat-giflib x86_64 4.1.6-1.fc28 @commandline 26 k トランザクションの概要 ================================================================================ インストール 1 パッケージ 合計サイズ: 26 k インストール済みのサイズ: 41 k これでよろしいですか? [y/N]: y パッケージのダウンロード中です: トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 Installed: compat-giflib-4.1.6-1.fc28.x86_64 インストール中 : compat-giflib-4.1.6-1.fc28.x86_64 1/1 scriptletの実行中: compat-giflib-4.1.6-1.fc28.x86_64 1/1 Installed: compat-giflib-4.1.6-1.fc28.x86_64 検証 : compat-giflib-4.1.6-1.fc28.x86_64 1/1 インストール済み: compat-giflib-4.1.6-1.fc28.x86_64 完了しました! $
これでコンパイル。
$ mcs MainClass.cs Unhandled Exception: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542 at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x0002b] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoReader..ctor (System.String term, System.String filename) [0x00065] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoDriver..ctor (System.String term) [0x00058] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver..cctor () [0x00062] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x0000a] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.Console..cctor () [0x000a8] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at Mono.CSharp.Driver.Main (System.String[] args) [0x00019] in <6c6b2f38a076460eacf227054ff6f99a>:0 [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542 at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x0002b] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoReader..ctor (System.String term, System.String filename) [0x00065] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoDriver..ctor (System.String term) [0x00058] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver..cctor () [0x00062] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x0000a] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.Console..cctor () [0x000a8] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at Mono.CSharp.Driver.Main (System.String[] args) [0x00019] in <6c6b2f38a076460eacf227054ff6f99a>:0 $
効果なし。
mono-completeとも書いてあったが、
$ sudo dnf install mono-complete メタデータの期限切れの最終確認: xx:xx:xx 時間前の xxxx年xx月xx日 xx時xx分xx秒 に実施しました。 一致した引数がありません: mono-complete エラー: 一致するものが見つかりません $
そもそもFedoraにはmono-completeがない。
ググってもなかなか正解が見つからないので、Twitter検索してたら、
ハマったのでメモ。
— boxnos (@boxnos) June 10, 2018
monoのインストール
# dnf install mono-devel
hello.cs書いたら、mcsでコンパイル。
% mcs hello.cs
だが、エラーが大量に出てコンパイルエラーになる。エラーメッセージで検索するとstackoverflowに
% export TERM=xterm
としろと。実行すると、コンパイルできた。
まさかの環境変数TERM・・・。
$ mcs Unhandled Exception: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542 at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x0002b] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoReader..ctor (System.String term, System.String filename) [0x00065] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoDriver..ctor (System.String term) [0x00058] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver..cctor () [0x00062] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x0000a] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.Console..cctor () [0x000a8] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at Mono.CSharp.Driver.Main (System.String[] args) [0x00019] in <6c6b2f38a076460eacf227054ff6f99a>:0 [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for 'System.Console' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception. ---> System.Exception: Magic number is wrong: 542 at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x0002b] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoReader..ctor (System.String term, System.String filename) [0x00065] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.TermInfoDriver..ctor (System.String term) [0x00058] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.ConsoleDriver..cctor () [0x00062] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x0000a] in <373b6e083d6e45e498c9082a8eebd27f>:0 at System.Console..cctor () [0x000a8] in <373b6e083d6e45e498c9082a8eebd27f>:0 --- End of inner exception stack trace --- at Mono.CSharp.Driver.Main (System.String[] args) [0x00019] in <6c6b2f38a076460eacf227054ff6f99a>:0 $ export TERM=xterm $ echo TERM TERM $ mcs error CS2008: No files to compile were specified Compilation failed: 1 error(s), 0 warnings $
"export TERM=xterm"だけで、エラー内容が変わったので、うまくいったっぽい・・・。
あらためて、
$ pwd /home/bg1/project/cloud/github.com/Sample/mono/Console/WriteLine/src/Console $ vi MainClass.cs $ ls MainClass.cs $ mcs MainClass.cs $ ls MainClass.cs MainClass.exe $ mono MainClass.exe ABCDE $
環境づくりでつまずいたが、ひとまず動いた。
Sample/mono/Console/WriteLine/src/Console at master · bg1bgst333/Sample · GitHub