はじめに
以前作成したC#のプログラムをLinux(Raspbian)で動かしたいと思い、C++にでも移植しなきゃと思っていました。MonoとかXamarinとかC#のプログラムをLinuxで動作させる環境があるのは知ってはいましたが、なんとなく面倒な感じがして試していませんでした。そんななか、Microsoft社から.Net Core SDK 2.0なるものが正式リリースされ、それを利用することで、C#のプログラムをLinuxで動作させることが簡単にできそうということが判明したので、試してみました。
- Windowsへの.NET Core SDKのインストール
- プロジェクトの作成
- Linux向けのビルド
- Raspberry Pi3への.NET Core SDKのインストール
- 実行ファイルのコピー
準備するもの
- PC(Windows 10)
- Raspberry Pi 3 (Raspbian)
現時点では、Raspberry Pi3でのセルフコンパイルはできない様子なので、WindowsにSDKをインストールし、クロスコンパイル(WindowsでRaspberry Pi3用の実行ファイルを作成)します。Raspberry Pi3側には実行環境のみインストールします。
Windowsへの.NET Core SDKのインストール
Windowsへの.NET Core SDKのインストールは非常に簡単で、Microsoft社のダウンロードサイトから.NET Core SDKインストーラをダウンロードして、実行するだけでインストールできます。今回は64ビット版のSDKをWindows10のPCにインストールしました。
プロジェクトの作成
.NET Core SDKでは、プロジェクトのひな型を作成するコマンドが準備されています。
.NET Core SDKのインストール後、Windowsのコマンドプロンプトから下記のように実行すると、プロジェクトのひな型が作成されます。
> dotnet new console -o hwapp > cd hwapp
console は作成するアプリケーションの種類を示します。
hwapp はプロジェクトの名前です。hwappディレクトリが作成されます。
下記で作成したプログラムを実行できます。
> dotnet run
Raspberry Pi3向けのビルド
現時点では、Raspberry Pi3でのセルフコンパイルはできない様子なので、上記のhwappディレクトリで下記を実行し、クロスコンパイルします。
> dotnet publish -r linux-arm
上記操作にて、 hwapp\bin\Debug\netcoreapp2.0\linux-arm\publish\ フォルダにRaspberry Pi3用の実行ファイル群が生成されます。このフォルダに格納されている全てのファイルを、後でRaspberry Pi3に転送します。
Raspberry Pi3への.NET Coreのインストール
Linux(Debian)への.NET Core SDKのインストールの指示に従って、Raspberry Pi3へ.NET Core SDKをインストールします。
~$ sudo apt-get update ~$ sudo apt-get install curl libunwind8 gettext apt-transport-https ~$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg ~$ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg ~$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-jessie-prod jessie main" > /etc/apt/sources.list.d/dotnetdev.list' ~$ sudo apt-get install dotnet-sdk-2.0.0
実行ファイルのコピー
hwapp\bin\Debug\netcoreapp2.0\linux-arm\publish\ フォルダに存在するファイルをすべて、Raspbeery Pi3の任意のフォルダに転送します。
手段は問いません。今回はWinSCPというソフトで転送しました。
実行
上記実行ファイルを転送した任意のフォルダに、カレントフォルダを移動して、下記を実行します。
実行権限がない場合は、付与してください
~$ ./hwapp
コンソールにHello World!と表示されます。