やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

LinuxにおけるC#開発環境

 結論、LinuxではMonoDevelopが最善。

結論

 CoreよりMono。

ツール SDK .NET環境 利用シーン
MonoDevelop MONO Standard, Framework ClassLib, UnitTest, ConsoleApp, Gtk#, Eto.Forms
dotnet .NET Core Standard, Core ClassLib, UnitTest, ConsoleApp

SDK

SDK 概要
.NET Framework Windowsでのみ利用可
.NET Core Linuxでは.NET Frameworkプロジェクトをビルド&実行不可
MONO .NET Frameworkの一部コードをLinux等で実行できる

 LinuxではMONOが最有力と考えて良さそう。

 .NET CoreはLinuxでも使えるものの、基本的にWindows上での利用のみ充実させるつもりらしい。たとえばWinFormやWPFも使えるようにするが対象OSはWindowsのみ可。

GUI

GUI Lib 概要
Gtk# Linuxで使用可能なGUIライブラリ
Eto.Forms Linux等の多環境で使用可能なGUIライブラリ

 LinuxにおいてGUIはEto.Formsが最善。Eto.Formsは.NET FrameworkプロジェクトなのでLinux上ではMONOでのみビルド可。

 なお、WinForm, WPFなどはすべてWindowsのみしか使用できない。

エディタ or ツール

開発環境 UI 対応OS
Visual Studio 20xx IDE Win
dotnet CLI Win, Mac, Linux
MonoDevelop IDE Win, Mac, Linux

 Linuxで使えるIDEMonoDevelopのみ。

 dotnetも使えるがCLIでありターミナルからコマンドを実行する面倒なもの。しかも.NET FrameworkのビルドはWindowsのみ。MONOのようにLinux上でのビルドができない。Eto.FormsのDesktopプロジェクトは.NET Frameworkであるため、MonoDevelopでないとビルドできない。

MONO vs Core

 結論:CoreよりMONO。MONOもCoreもクロスプラットフォームを売りにしている。しかし実際はMONOのほうが優秀。

 Linuxでもdotnetは使えるが、MonoDevelopがあれば不要。dotnetならMONOにはできない.NET Core対応プロジェクトを作成することができる。しかしそもそもCoreアプリ自体の汎用性が低い。CoreのGUIライブラリはWindowsでしか使えないからだ。Eto.Formsも同様にWindowsでしか使えない。Eto.Formsが.NET Frameworkプロジェクトであり、.NET FrameworkWindows上でしか動作しないからだ。

誤解のないように言うと、Windows Desktop コンポーネントWindows でのみサポートされています。

 MONOならEto.Formsが使える。MONOならLinuxでも.NET Frameworkをビルドできるためだ。LinuxではCoreなど要らない子である。

 .NET CoreにもクロスプラットフォームGUIライブラリがあるらしいが未調査。

 .NET Coreの一体どこがクロスプラットフォームなのか。.NETファミリが乱立して紛らわしくなっただけに思える。一応フォローしておくとUnitTestやConsoleアプリまでならクロスプラットフォームに開発できる。だが、GUIアプリ開発までできるMONOにはかなわない。クロスプラットフォームという一点だけで言えば、.NET Coreは劣化版MONOである。

 よってLinuxではMONOが最善。

Visual Studio Code

 Visual Studio CodeというテキストエディタLinuxで使える。IDEではないためビルドや実行はできないと思うが、頑張れば.NET Coreと連携できるらしい。が、Linuxでは.NET Frameworkがビルドできない問題があるため用途は限定される。

 やはりLinuxではMonoDevelopが良いだろう。

対象環境