以前「.NET Coreがraspberry pi にくる!!」との投稿を行った。でも、その後検索したら、.NET環境ならMonoがすでにあるからそれで動かせるといった記事がたくさんあったOrz….
まあ、気を撮り直して、こちらは本家?コミュニティー版の.NET Coreである。しかもRaspbian(jessie)で動作させる。Ubuntuではない。
まず動作させるのにこの必要なもののページを参考に、必要なパッケージをインストール。パッケージは下記の通りこのページのUbuntuの項のものすべてをインストール。
- libunwind8
- libunwind8-dev
- gettext
- libicu-dev
- liblttng-ust-dev
- libcurl4-openssl-dev
- libssl-dev
- uuid-dev
- unzip
次に、Raspbian上で、.NET用にディレクトリを作成。
pi@raspberrypi:~ $ mkdir /home/rasberrypi/dotnet
で、このページ下部のDaily BuildからUbuntu 14.04 (arm32)のtarballをダウンロード。
私はブラウザからダウンロードしたので~/Downloadsフォルダにダウンロードされた(ファイル名はdotnet-ubuntu-latest-arm.tar.gz)。そしたらダウンロードしたファイルを上記で作成したdotnetフォルダに展開。
pi@raspberrypi:~ $ tar -xvf ~/Downloads/dotnet-ubuntu-latest-arm.tar.gz -C ~/dotnet
これでRaspbian Jessie上で動作させる準備はととのった。
Raspbian上で動作するSDKはまだ無いそうな。そこで、今回はDebian Jessie(AMD64)なPCでサンプルプログラムを作成・ビルドをする。
まず、.NET Core Chrisの「How to install .NET Core on Raspberry Pi」のHelloWorldプログラムを作成するが、このプロジェクト用のディレクトリを作成して(HelloWorldとする)、そのディレクトリに移動
AMD64:~/dotnet $ mkdir HelloWorld; cd HelloWorld
プロジェクト用ディレクトリの初期化
AMD64:~/dotnet/HelloWorld $ dotnet new
するとそのディレクトリにProgram.csというファイルができる。
AMD64:~/dotnet/HelloWorld $ ls
Program.cs project.json
そのファイルを適当なエディタで開き、次のプログラムをコピペ、保存。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace helloworld
{
public class Program
{
public static void Main(string[] args)
{
Console.Write("Hello World!!" + Environment.NewLine);
}
}
}
保存したら
AMD64:~/dotnet/HelloWorld $ dotnet restore
AMD64:~/dotnet/HelloWorld $ dotnet publish
のコマンドを連発。すると現在のフォルダ(HelloWorld)の中にbin/Debug/netcoreapp1.1/publishというフォルダが作成され、そのなかにpublishされた(?)ファイルが保管される。そのなかの、この場合HelloWorld.dllというのが実行ファイルである。
AMD64:~/dotnet/HelloWorld $ ls bin/Debug/netcoreapp1.1/publish/
HelloWorld.deps.json HelloWorld.runtimeconfig.json
HelloWorld.dll HelloWorld.runtimeconfig.json~
HelloWorld.pdb
ここで終わりではなく、プログラムを実行させる環境に合わせて設定ファイル?を編集する必要がある。同フォルダの中にHelloWorld.runtimeconfig.jsonというファイルがあり、中身は
{
"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "1.1.0"
}
}
となっているはず。この”version”のコロン(:)の右側をRaspbian Jessieに準備したdotnetのバージョンにする必要がある。
バージョンを調べるには、raspbianにもどり、仮想ターミナル上で一番最初ぐらいに作成した~/dotnetフォルダに移動して、そこから
pi@raspberrypi:~/dotnet $ ./dotnet –info
を実行すると確認できる。
私の場合はバージョンは”2.0.0-preview1-001967-00″であった。そこで、上記jsonファイルのバージョンを書き換えて以下のようにして保存。中身は
{
"runtimeOptions": {
"framework": {
"name": "Microsoft.NETCore.App",
"version": "2.0.0-preview1-001967-00"
}
}
となるはず。
そこで、Raspbianの~/dotnetフォルダに、Debian機の~/dotnet/HelloWorld/bin/Debug/netcoreapp1.1/publishフォルダそのものをSCPなどでコピー。
Raspbianの仮想ターミナルから、いまコピーしたフォルダpublishを紛らわしいのでHelloWorldへリネーム。
pi@raspberrypi:~/dotnet $ mv publish HelloWorld
そして、やっとプログラムの実行。
pi@raspberrypi:~/dotnet $ ./dotnet HelloWorld/HelloWorld.dll
ようやくRaspbian上で実行できた!!「HelloWorld!!」が表示された!!
ただ、コマンドをキーイン・エンターキーを押してから「Hello World!!」が表示されるまでには0.5秒ぐらいのタイムラグがあるのが微妙。