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のみ可。