やってみる

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

.NET開発環境とプロジェクトの対応パターンについて調べた

 どのプロジェクトを作るとき、どの環境を選べばいいのか。

パターン

パターン=.NET開発環境×プロジェクト型

 .NET開発環境とプロジェクトには様々な種類がある。これらを組み立てることで任意のプロジェクトを構成する必要がある。

種類

 .NET開発において基本となるソフトウェアにはいくつかの選択肢がある。

.NET開発環境

ソフトウェア 説明
.NET Framework Microsoft製のWindowsでしか使えない閉鎖環境
MONO) LinuxiOSでも使える公開環境
.NET Core オープンソースな最新.NET環境
.NET Standard 仕様+API実装。全.NET環境に共通する基本API

 以下のような指標でどれを使うか決めればいいと思う。

 ただし以降に説明するように特定プロジェクトでは特定の環境でないと作成できない。

テスト用フレームワーク

 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. クラスライブラリを作る
  2. 1をテストする
  3. 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)

 環境依存のCUIAPIを使ったライブラリはCoreにすべきか。

  • ソリューション
    • クラスライブラリ(Standard)
    • クラスライブラリ(Core)
    • テスト(Core)
    • Console(Core)

ライブラリ+テスト+Eto.Forms

  • テスト用ソリューション
    • クラスライブラリ(Standard)
    • テスト(Core)
  • UI用ソリューション
    • クラスライブラリ(Standard)
    • Eto.Forms(Standard)

 もしスタートアッププロジェクト(エントリポイント)をStandardCoreの両方にできるなら、以下のように統合するとシンプルになる。

  • ソリューション
    • クラスライブラリ(Standard)
    • テスト(Core)
    • Eto.Forms(Standard)

対象環境

前回まで

 dotnetコマンドは.NETプロジェクトを作成するコマンド。.NET Coreをインストールすることで使用できる。