前回に引き続き、.NET Coreを使ったプロジェクトの基本を見ていきます。
今回はファイルや依存ライブラリの追加、ビルド時の各種設定などを見ていきます。
ファイルの追加など
.Net Coreのプロジェクトでは、今までのcsprojでのファイル管理とは異なり、project.jsonのあるフォルダ以下のファイルはすべてプロジェクトに含まれた状態となるようです。
そのため、プロジェクトにファイルを追加したい場合は、こんな風に単純にファイルを作成してその中にクラスを書くだけでOKです。
こんなファイルを用意しました。
Person.cs
namespace Sample { publicclass Person { publicstring Name { get; set; } publicint Age { get; set; } public Person (string name, int age) { this.Name = name; this.Age = age; } } }
Program.cs
using System; using Sample; namespace ConsoleApplication { publicclass Program { publicstaticvoid Main(string[] args) { var person = new Person("hoge", 20); Console.WriteLine($"{person.Name}さん, {person.Age}才"); } } }
実行結果は以下の通り。
ただ、Win10のコマンドプロンプトで実行したら、こんな風に文字化けしてしまいました・・・
文字コードの問題とかですかね。。。
依存ライブラリの追加
Json.NETを使い、JSON形式のデータを扱ってみます。
依存するライブラリを追加するには、以下のようにproject.jsonのdependenciesの項目にライブラリとそのバージョンの情報を追記します。
追記したら、dotnet restore
を実行すればOK!!
project.json
{"version": "1.0.0-*", "buildOptions": {"debugType": "portable", "emitEntryPoint": true}, "dependencies": {"Newtonsoft.Json": "9.0.1"}, "frameworks": {"netcoreapp1.0": {"dependencies": {"Microsoft.NETCore.App": {"type": "platform", "version": "1.0.1"}}, "imports": "dnxcore50"}}}
微妙にメンドイですね。。。
npmでのパッケージインストールみたいにできないのかなぁ、と思いGitHubのissuesを眺めていたら、以下のようなページを見つけました。
https://github.com/dotnet/cli/issues/1578
今後のアップデートで、ライブラリをインストールするためのコマンドなども追加されるのかな??
準備ができたら、Program.csを以下のように書き換えて実行してみます。
Program.cs
using System; using Sample; using Newtonsoft.Json; namespace ConsoleApplication { publicclass Program { publicstaticvoid Main(string[] args) { var person = new Person("hoge", 20); var json = JsonConvert.SerializeObject(person, Formatting.Indented); Console.WriteLine(json); } } }
こんな風に、フォーマットされたJSON文字列が出力されます。
exeファイルとしてビルドする
最後に、実行可能なexeファイル形式としてビルドをしてみます。
project.jsonのファイルを、以下の手順で編集します。
"type": "platform"
と書かれている部分を削除します。- runtimesという項目を追加し、以下のように対象のプラットフォームを書きます。
"runtimes": {"win10-x64": {}, "osx.10.11-x64": {}}
project.json
{"version": "1.0.0-*", "buildOptions": {"debugType": "portable", "emitEntryPoint": true}, "dependencies": {"Newtonsoft.Json": "9.0.1"}, "frameworks": {"netcoreapp1.0": {"dependencies": {"Microsoft.NETCore.App": {"version": "1.0.1"}}, "imports": "dnxcore50"}}, "runtimes": {"win10-x64": {}, "osx.10.11-x64": {}}}
project.jsonを編集したら、dotnet restore
、dotnet build
とコマンドを実行します。
すると、こんな風にexeファイルとして出力されます。
別のプラットフォーム用にビルド
先ほどの手順では、「win10-x64」環境向けのファイルだけが作られていました。
runtimes
の項目に書いた、別のプラットフォーム向けにビルドするには、
以下のように、-rオプションを付けてビルドします。
dotnet build -r osx.10.11-x64
dotnet publish
先ほどの手順で、dllではなくexeとして実行可能な形式でビルドすることができました。
しかし、この実行ファイルは.NET Coreの各種パッケージに依存した実行ファイルなので、.NET Coreのランタイムがない環境では実行できません。
.NET CoreのランタイムがないPCで実行できるような形式でビルドするには、以下のコマンドを実行します。
dotnet publish
すると、ビルド結果が保存されるディレクトリにpublishというフォルダができます。
この中には実行に必要なライブラリ類とexeファイルがすべて格納された状態となっています。
このフォルダ一式をまとめてコピーすれば、ビルドした環境以外でもexeファイルを実行できる状態となっています。
MacやLinuxなどの環境での動作はまだ試せていませんが、 この方法でビルドしたexeファイルを、.NET CoreをインストールしてないWin環境に持っていっても実行することができました。
リリースビルド
リリースビルドする場合は、以下のように-cオプションを加えてビルドします。
dotnet build -c Release
今回はここまで。