かばちんのエンジニアブログ

日々の経験の中で培った内容を備忘録も兼ねて記録していくブログです。少しでも誰かの役に立つために頑張って続けていけたらなと思います。

CoreCLRでNugetからライブラリを取り込む方法

CoreCLRを使うことでLinux上で.NETプロジェクトを動かすことができるようになりました。
空のプロジェクトからシステムを組んでいくにあたりどうしてもNugetからライブラリが欲しかったりすると思います。


もしくは、Windowsで作っていたプロジェクトを移植するにあたりNugetのライブラリを既に使っていた場合も同様に、
Nuget経由でのライブラリ取得をしたい場合が出てくると思います。


CoreCLRの情報がまだまだ少ないので、自分で試してみたNuget経由でのライブラリ取得方法をご紹介したいと思います。
紹介と言っても、やっているので設定ファイルを変更してコマンドをひとつ叩くだけですが。。

前提条件

・CoreCLRがどんなものか知っている
dotnet new や dotnet restore コマンドでプロジェクトを作成できることを知っている


設定ファイルの変更

CoreCLRの設定ファイルといえば project.json ファイルです。
このファイルはCoreCLRプロジェクトに関わる設定が書かれています。


CoreCLRバージョンの指定や、依存関係、フレームワークなどを指定できます。
今回は試しに Newtonsoft.JSON の 9.0.1 をNugetで取得する記述を追加してみます。

変更前

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

変更後

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    },
    "Newtonsoft.Json": "9.0.1"  // この行を追加
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

Nugetからの取得

実際にライブラリを取得するには、プロジェクト作成時にも行ったであろう
dotnet restore コマンドを再度実行します。
すると下記のような感じで取り込まれます。

$ dotnet restore
log  : Restoring packages for /root/project.json...
info :   GET https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethostresolver/index.json
info :   GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethostresolver/index.json 673ms
info :   OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json 678ms  // Newtonsoft
info :   GET https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethost/index.json
info :   GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg
info :   OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg 172ms
info :   OK https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethost/index.json 664ms
log  : Installing Newtonsoft.Json 9.0.1.  // Newtonsoft
info : Committing restore...
log  : Writing lock file to disk. Path: /root/project.lock.json
log  : /root/project.json
log  : Restore completed in 2970ms.

NuGet Config files used:
    /root/.nuget/NuGet/NuGet.Config

Feeds used:
    https://api.nuget.org/v3/index.json

Installed:
    1 package(s) to /root/project.json

最後に

まだ実際に使えるかどうかまでは試していませんが、ひとまず取り込むことはできました。
これがうまく使えるようになるといろいろなライブラリが自由に使えるようになるので、
スムーズな開発を行うことができるようになりそうです。


※追記
実際に動くかどうか、簡単ですが試してみました。
kabatin.hateblo.jp