Raspberry Pi 4 の.NET 環境構築

# はじめに

Raspberry Pi 4B に、.NET 5 でコーディング、実行する環境を構築します。

:::note warn
2021年現在、デバッグ実行のためには、テスト中の拡張機能が必要です。
:::

標準の Raspbian OS のデスクトップ上で、VS Code によるコーディング、実行を繰り返し、GPIO の動作を確認したいといった目的で利用する、初学者向けの環境構築手順です。vscode + C# の基本については省略して、Windows環境構築との差分について記述しています。

Raspbian 上で動かした　vscode の動作は、決して軽快とは言えないので、本格的な開発を行う場合は、リモートSSHを使用して、コーディングと実行環境の分割を検討してください。

## .NET SDK

Raspbian OS の標準イメージは 32bit カーネルのため、.NET SDK は、Arm32 を選択します。

Ubuntu の場合、パッケージでのインストールが可能ですが、Raspbian へは、手動でのインストール手順を実行します。

最新のSDKバージョン確認、ダウンロードURLは、以下から確認します。

https://dotnet.microsoft.com/download

.NET 5 > SDK - Arm32 のダウンロードページを開きます。

https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.402-linux-arm32-binaries

ダウンロードページの、コマンドと手順に基本的には従います。

公式の手順は、/home/pi 以下に配置していますが /usr/share/dotnet に配置します。

pi ユーザーの環境変数を設定します。

```shell-session
$ nano ~/.bashrc 

# dotnet sdk enviroments
export DOTNET_ROOT=/usr/share/dotnet
export PATH=$PATH:$DOTNET_ROOT
```

## VS Code 関連

重要な問題点として、Raspberry Pi 上で動作させている VS Code で、デバッグを実行する正当な方法がありません。

C# 拡張機能の元である、OmniSharp が、ARMをサポートしていないためです。

C# 拡張機能をインストール後、`dotnet new console` で作成したプロジェクトフォルダーを開くと、以下の通知メッセージが表示されます。

:::note alert
The C# extension for Visual Studio Code (powered by OmniSharp) is incompatible on linux armv7l
:::

本来ならば、自動で launch.json の生成するかを確認する通知メッセージが表示されます。

Feature Request の issue が発行されています。

https://github.com/OmniSharp/omnisharp-vscode/issues/2771#issuecomment-706589854

修正のPRが、テスト進行中です。

https://github.com/OmniSharp/omnisharp-vscode/pull/4515

慣れ親しんだ、F5 による実行とデバッグ (launch.json による定義) を可能にするには、後述のPR承認待ちの拡張機能をインストールします。

.NET 5 自体は、ARMをサポートしているため、ターミナルを開いて、`dotnet build` & `dotnet run` する事で、現在でも実行はできます。

### csharp-1.23.17.vsix　を先行テスト 

armv7l が追加定義された　vsix を手動インストールしてテストします。

https://github.com/Cyber1000/omnisharp-vscode/releases/tag/v1.23.17-beta1.arm64%2B001

※beta1 の 400k 程度のビルドを使用します。直近のビルドは、100Mを超えていて余計なものが含まれてしまっています。

ダウンロードした vsix をファイルからインストールすると、既存の拡張機能に上書きインストールされます。

```text
Installing C# dependencies...
Platform: linux, armv7l, name=raspbian, version=10

Downloading package '.NET Core Debugger (linux / ARM)' (56954 KB).................... Done!
Validating download...
Integrity Check succeeded.
Installing package '.NET Core Debugger (linux / ARM)'

Finished
```

実行とデバッグを開き、launch.json をワークスペースに追加します。

構成の追加で、`{} .NET: Launch .NET Core Console App` を選択します。

```jsonnet
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/net5.0/Xxxxx",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "console": "internalConsole"
        }

    ]
}
```

program の部分を環境に合わせて修正します。

ビルドも実行できるように、ビルドタスクを作成します。

ターミナル > 既定のビルド タスクの構成... > テンプレートから task.json を生成 > .NET Core ビルドコマンドを実行

デバッグ実行の開始と、ブレークポイントによる停止が可能である事を確認しました。

![2021-11-14-024306_1019x737_scrot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502112/7da8dd2e-a074-5daf-a169-97b32f855e54.png)


### git のユーザー情報設定

コードを管理する GitHub ユーザー情報を　git config で初期設定します。

https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup

```shell-session
$ git config --global user.name xxxxx
$ git config --global user.email xxxxx@exsample.com
```

### 「GitHub に公開」を可能にする

ソース管理から、GitHub に公開 を実行すると、エラーが発生します。
![2021-11-07-022913_602x470_scrot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502112/6ecc48f4-879a-643d-70e3-f2ecfa7b1d76.png)
初回実行時に、ブラウザで vscode-auth.github.com でアクセストークンの発行後、出力の "GitHub Authentication" に、以下のエラーが出力されます。

`Setting token failed: Error: The name org.freedesktop.secrets was not provided by any .service files`

通知には、キーチェーンの保存に失敗したとのメッセージが表示されます。

https://github.com/microsoft/vscode/issues/130640

```shell-session
$ sudo apt-get install gnome-keyring
```

gnome-keyring をインストール後、GitHub に作られてしまった空リポジトリを削除後に、公開を再実行します。

VS Code を起動する度に、キーチェインをアクティブにする為のパスワード入力を求められます。

# 参照記事

https://qiita.com/neomi/items/1e2b955207425b4f63bf