どのプロジェクトを作るとき、どの環境を選べばいいのか。
パターン
パターン=.NET開発環境×プロジェクト型
.NET開発環境とプロジェクトには様々な種類がある。これらを組み立てることで任意のプロジェクトを構成する必要がある。
種類
.NET開発において基本となるソフトウェアにはいくつかの選択肢がある。
.NET開発環境
ソフトウェア | 説明 |
---|---|
.NET Framework | Microsoft製のWindowsでしか使えない閉鎖環境 |
MONO) | LinuxやiOSでも使える公開環境 |
.NET Core | オープンソースな最新.NET環境 |
.NET Standard | 仕様+API実装。全.NET環境に共通する基本API群 |
以下のような指標でどれを使うか決めればいいと思う。
- クロスプラットフォームなら
Standard
orMONO
- 特定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 コマンドについて調査する