どのプロジェクトを作るとき、どの環境を選べばいいのか。
パターン
パターン=.NET開発環境×プロジェクト型
.NET開発環境とプロジェクトには様々な種類がある。これらを組み立てることで任意のプロジェクトを構成する必要がある。
種類
.NET開発において基本となるソフトウェアにはいくつかの選択肢がある。
.NET開発環境
| ソフトウェア | 説明 |
|---|---|
| .NET Framework | Microsoft製のWindowsでしか使えない閉鎖環境 |
| MONO) | LinuxやiOSでも使える公開環境 |
| .NET Core | オープンソースな最新.NET環境 |
| .NET Standard | 仕様+API実装。全.NET環境に共通する基本API群 |
以下のような指標でどれを使うか決めればいいと思う。
- クロスプラットフォームなら
StandardorMONO - 特定OS用バイナリ作成なら
Core - Windowsのみに対応する旧式環境なら
Framework
ただし以降に説明するように特定プロジェクトでは特定の環境でないと作成できない。
テスト用フレームワーク
- NUnit
- xUnit
- MSTest
NUnit使っておけばいいと思う。テスト用フレームワークの違いについてはこちらを参照。
注意! すべてのテスト用フレームワークはCore, Frameworkのいずれかのみで使用可。Standardでは使用不可。
| F/W | 環境 |
|---|---|
| NUnit | Core, Framework |
| xUnit | Core, Framework |
| MSTest | Core, Framework |
実行フレームワーク
| UI | 環境 |
|---|---|
| ClassLib | Core, Standard |
| Console | Core |
| ASP.NET | Core |
| Eto.Forms | Standard |
実行するUIによって環境がかわる。ConsoleならCore, Eto.FormsならStandard。ここでどの環境を使うか決まる。
ライブラリは両方作成できる。
StandardならCore, Framework, MONOからでも利用できる。クラスライブラリはStandardにするのが良さそう。versionは低いほうが動作条件がゆるくなるためオススメ。dotnet new classlibの-fがデフォルトでnetstandard2.0なのでわざわざ指定しなくて良さそう。
GUIフレームワーク
| GUI | 環境 |
|---|---|
| Eto.Forms | Standard |
| WPF | Framework |
| WinForm | Framework |
他にもあるかもしれないが、私が過去に動作確認できたものはこれくらい。
結局どうすればいいの?
開発は以下のように進めるはず。
- クラスライブラリを作る
1をテストする- UI環境で
1を用いる
これを実現するようなプロジェクト作成をすればいい。
| プロジェクト | 環境 |
|---|---|
| クラスライブラリ | Core, Standard |
| テスト | Core, Framework |
| UI | Core or Standard |
クロスプラットフォームの度合いが高い順に以下。
Standard>Core>Framework
つまり以下のようにするのが良さそう。
| プロジェクト | 環境 | 説明 |
|---|---|---|
| クラスライブラリ | Standard |
|
| テスト | Core |
|
| CUI(Console) | Core |
|
| Web(ASP.NET) | Core |
|
| GUI(Eto.Forms) | Standard |
ソリューション構成パターン
ライブラリ+テスト
- ソリューション
- クラスライブラリ(
Standard) - テスト(
Core)
- クラスライブラリ(
ライブラリ+テスト+CUI
- ソリューション
- クラスライブラリ(
Standard) - テスト(
Core) - Console(
Core)
- クラスライブラリ(
環境依存のCUI系APIを使ったライブラリはCoreにすべきか。
- ソリューション
- クラスライブラリ(
Standard) - クラスライブラリ(
Core) - テスト(
Core) - Console(
Core)
- クラスライブラリ(
ライブラリ+テスト+Eto.Forms
- テスト用ソリューション
- クラスライブラリ(
Standard) - テスト(
Core)
- クラスライブラリ(
- UI用ソリューション
- クラスライブラリ(
Standard) - Eto.Forms(
Standard)
- クラスライブラリ(
もしスタートアッププロジェクト(エントリポイント)をStandardとCoreの両方にできるなら、以下のように統合するとシンプルになる。
- ソリューション
- クラスライブラリ(
Standard) - テスト(
Core) - Eto.Forms(
Standard)
- クラスライブラリ(
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch(9.0) 2018-06-27
- Mono 5.16.0
- MonoDevelop 7.6 build 711
- Eto.Forms 2.4.1 拡張機能, NuGetパッケージ
- .NET Core 2.2, MonoDevelop参照方法
前回まで
dotnetコマンドは.NETプロジェクトを作成するコマンド。.NET Coreをインストールすることで使用できる。
- C#の実行環境について調べた(.NET Framework, .NET Core, .NET Standard, MONO)
- Raspbian stretch に .NET Core 2.2.101 をインストールした
- Raspbian stretch MonoDevelop で .NET Core 2.2.101 を参照する(.NET Standard 2.0)
- Raspbian stretch dotnet コマンドで .NET Core コンソールアプリ プロジェクトを作成&ビルドし実行できた
- Raspbian stretch dotnet コマンドで .NET Core コンソールアプリ+EFCore+SQLite3 プロジェクトを作成できた! やっとできた!
- Raspbian stretch dotnet コマンドについて調査する