athome-developer’s blog

不動産情報サービスのアットホームの開発者が発信するブログ

dotnetコマンドで複数プロジェクトを持つソリューションを作成する

こんにちは、 情報システム部の高野です。
タイトル通りの内容です。社内勉強会のために調べたので載せておきます。
(VisualStudioを使えばいいじゃないって話なんですが、それを言ったらおしまいです)

環境

Windows10
.NET Tools 1.0.1

構成

最終的に下図のような構成にします。
f:id:taktak1974:20170324105015p:plain

作成手順

ソリューションのディレクトリを作成します。
ここではSampleプロジェクトとします。

mkdir Sample && cd Sample


ソリューションファイルを作成します。
デフォルトでディレクトリ名と同じ名前のソリューションファイルが作成されます。

dotnet new sln


ClassLibraryプロジェクトのディレクトリを作成します。

mkdir src\ClassLibrary && cd src\ClassLibrary


ClassLibraryプロジェクトを作成します。
デフォルトで言語はC#フレームワークはnetstandard1.4になります。
フレームワークは後からでもcsprojファイルを変更すれば変えられます。

dotnet new classlib


一応、問題ないか確認するためリストアとビルドをしておきます。

dotnet restore
dotnet build


ソリューションファイルにプロジェクトを追加します。
ソリューションファイルが存在するディレクトリで実行する場合は、ソリューションファイル名は省略可能です。

dotnet sln ..\..\Sample.sln add ClassLibrary.csproj


ちゃんと追加されたか確認します。

dotnet sln ..\..\Sample.sln list
Project reference(s)
--------------------
src
src\ClassLibrary\ClassLibrary.csproj


nugetからパッケージを追加してみます。
csprojファイルに追加されるのでリストアすれば利用できるようになります。

dotnet add package Microsoft.Data.SQLite


同様にテストプロジェクトも作成します。

cd ..\..
mkdir test\ClassLibraryTest && cd test\ClassLibraryTest
dotnet new xunit
dotnet sln ..\..\Sample.sln add ClassLibraryTest.csproj


テストプロジェクトはクラスライブラリプロジェクトを参照する必要があるので
参照するようにコマンドを実行します。

dotnet add reference ..\..\src\ClassLibrary\ClassLibrary.csproj

csprojファイルに参照設定が追記されます。



ここまでの手順で2つのプロジェクトを持つソリューションが作成できました。
手順としては、VisualStudioのGUIで作成するよりは手間がかかりますが
最初だけなので問題ない範囲なのではないでしょうか?

問題点

少し余談的な話になるのですが、テストを記述して実行します。

VSCodeのコードレンズのrun testからテストを実行すると
「Failed to run test because null」
と表示されテストが実行できない。
多分、下記の問題なので待つしか無さそう。
github.com


今のところはコマンドで

dotnet test

でもコマンドだと結果が文字化けします。
これはターミナルの文字コードUTF-8にすれば解消されます。

chcp 65001

さらに余談

以前は、dotnet builddotnet restoreはプロジェクトファイルがある場所で実行するか
コマンドにパスを指定して1つ1つ実行する必要があったのですが
現在は、ソリューションのディレクトリでコマンドを実行すると
ソリューションに属するプロジェクトすべてに実行が可能になってます。
便利になったというか以前が不便すぎましたね。




弊社ではエンジニアを募集しています。
興味がある方は下記からエントリお願いします。
athome-inc.jp