.NET Core3.0をRaspberry piにインストールし、Windows10上でVisual Studio 2019を使って作成したプログラムを、Raspberry piにSFTPアプリにより転送して実行します。作成するプログラムは、開発者向けにRESTなWebAPIを提供している「JSONPlaceholder 」から「投稿情報のIDが1(https://jsonplaceholder.typicode.com/posts/1)」をアクセスし、C# .NET Core3.0のコンソールアプリにより作成します。

動作環境

  • Windows 10 Pro
  • Visual Studio 2019
  • .NET Core3.0
  • Raspberry pi 3+
  • 2019-07-10-raspbian-buster

.NET Core3.0をRaspberry piにインストール

「raspbian-buster」を公式サイトからダウンロードしてRaspberry piで起動します。「.NET Core 3.0」は、Windows 10 で「Download .NET Core 3.0」から次のような「SDK 3.0.100 Linux .NET Core Binaries: ARM32 」をダウンロードします。

.NET Core3.0ダウンロード

Raspberry Pi 3に搭載されているSoC「BCM2837」はARMv8という64bitアーキテクチャを採用しており、64bit OSが動作可能だが、現状では、Raspberry Pi財団の公式Linuxディストリビューション「Raspbian」が32bitで提供されています。

ダウンロードした「.NET Core 3.0バイナリ」をRaspberry piにSFTPアプリにより転送します。Raspberry piで次のコマンドによりダウンロードした「.NET Core 3.0バイナリ」をRaspberry piに展開します。dotnet フォルダが作成されダウンロードした「.NET Core 3.0バイナリ」が展開されます。

mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.0.100-linux-arm.tar.gz -C $HOME/dotnet

動作環境を設定するため、ファイル「.bashrc 」に次のコマンドを追加し、常にパスを通しておきます。

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

Raspberry piをリセットして、次のコマンドで.NET Core 3.0が正常にインストールされているかを確認します。インストールされたバージョンが、「.NET Core SDK (3.0.100)」と表示されます。

$ dotnet --help
.NET Core SDK (3.0.100)
使用法: dotnet [runtime-options] [path-to-application] [arguments]

.NET Core アプリケーションを実行します。

runtime-options:
  --additionalprobingpath    調査ポリシーと調査対象アセンブリを含むパス。
  --additional-deps          追加の deps.json ファイルへのパス。
   ・・・・

Visual Studio 2019でRaspberry pi用プログラムの作成

Visual Studio 2019(すでに「.NET Core3.0」はインストールされていました)を起動して、「新しいプロジェクトの作成」を実行し、「コンソールアプリ(.NET Core)」を選択します。「Hellow World!」を表示するプログラムコードが表示されます。ここで、プロジェクトのプロパティを選んで、「アプリケーション」「対象フレームワーク」で「.NET Core3.0」が使用されていることを確認します。

.NET Core3.0の使用確認画面

「投稿情報のIDが1(https://jsonplaceholder.typicode.com/posts/1)」をアクセスする次のプログラムを作成します。

using System;
using System.Diagnostics;
using System.Net.Http;
using System.Net.Http.Headers;

namespace CoreTest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (var httpClient = new HttpClient())
                {
                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    string url = "https://jsonplaceholder.typicode.com/posts/1";
                    var response = httpClient.GetAsync(url).Result;
                    string jsonResult = response.Content.ReadAsStringAsync().Result;
                    Console.WriteLine($"jsonResult...{jsonResult})");
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }
    }
}

上記のようにプログラムを作成し、「ソリューションのビルド」でコンパイルすると、フィルダ「Debug」に「netcoreapp3.0」が作成されます。

Raspberry piで作成したプログラムの実行

作成したプログラム「netcoreapp3.0」をRaspberry piにSFTPアプリにより転送し、実行権限を付与して、次のコマンドで実行します。JSONPlaceholderからJSONデータを受信して表示します。

pi@raspberrypi:~/coretest $ ls
netcoreapp3.0
pi@raspberrypi:~/coretest $ cd netcoreapp3.0
pi@raspberrypi:~/coretest/netcoreapp3.0 $ ls
CoreTest.deps.json  CoreTest.exe  CoreTest.runtimeconfig.dev.json
CoreTest.dll        CoreTest.pdb  CoreTest.runtimeconfig.json
pi@raspberrypi:~/coretest/netcoreapp3.0 $ dotnet ./CoreTest.dll
jsonResult...{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
})
pi@raspberrypi:~/coretest/netcoreapp3.0 $