MonoDevelopは.NET Core非対応。それを考慮してLinuxで動作する最善のプロジェクト作成方法について考えてみた。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-06-27
- Mono 5.18.0.240
- MonoDevelop 7.6 build 711
- Eto.Forms 2.4.1 拡張機能, NuGetパッケージ
- .NET Core 2.2, MonoDevelop参照方法
プロジェクト構造
- ソリューション
- プロジェクト(ClassLib)
- プロジェクト(Test)
- プロジェクト(App)
| プロジェクト | 概要 |
|---|---|
| ClassLib | 実装。Test, Appで参照する |
| Test | ClassLibの単体テスト。 |
| App | 実行環境。CUI, GUI, Web。 |
思想
- ビジネスロジックの実装はすべてClassLibに含める
- 単体テストで品質確保
- Appで各環境に対応
- ClassLibを参照する
- ClassLibは.NET Coreでなく.NET Standardにすることで多環境に対応
- Appの実装は単体テストしない(できない)
- ClassLibを参照する
MonoDevelop
プロジェクト新規作成ダイアログ
- MonoDevelopを起動する
- メニュー→
ファイル→新しいソリューション 新しいプロジェクトダイアログが出る
以下のようにそれぞれ選択してプロジェクト作成する。
- ClassLib
- マルチプラットフォーム > .NET Standard ライブラリ
- Test
- App
- Console
- その他 > .NET > 全般 > コンソール プロジェクト
- Eto.Forms
- マルチプラットフォーム > アプリ > Eto Application
- ASP.NET
- Console
ClassLib
| 環境 | 概要 | MonoDevelopダイアログ |
|---|---|---|
| .NET Standard | Core, Framework, MONOでも動作可 |
マルチプラットフォーム > .NET Standard ライブラリ |
| .NET Core | MONOはCore非対応(ビルド&実行不可) |
.NET Core > ライブラリ > クラス ライブラリ |
| .NET Framework | MONOでビルドすればLinuxでも使える | その他 > .NET > ライブラリ |
以下の基準で決めればいい。
- 最も多環境に対応できる
Standardを利用する Standardの実装にないAPIを使いたいならFrameworkを利用する
App
実行環境。CUI, GUI, UnitTestなどを実行する。ライブラリ以外の実行バイナリ全般。
.NET Standardは使えない。.NET Standardは仕様でありクロスプラットフォーム用API群にすぎない。実行バイナリを作成するには具体的な環境依存した.NET Coreか.NET Frameworkを使用する必要がある。MonoDevelopの場合は.NET Frameworkのみ可。