Open10

Raspberry Piで.NET 6開発をしたい

しごぶしごぶ

マイクロソフト公式のページにインストール方法が書いてあった

https://docs.microsoft.com/ja-jp/dotnet/iot/deployment
ページのタイトルが「アプリを展開する」だから分かりづらいけど、
「フレームワーク依存アプリの展開」の「2.」で解説されている。
この項目の上から順番にターミナルへコピペすれば良さそう。

以下、このページのインストール方法を見る前の内容。

まず、.NET 6のインストールでつまずく。

dotnet-install スクリプトを使用するのが簡単そう。
https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-scripted-manual#scripted-install

実行権限を与えて実行すると自動でインストールされる。
環境変数に設定されていないので、設定する。

ターミナルからコマンドを使って設定しても、ターミナルを閉じると消えてしまう。
環境変数の永続化をしないといけない。
「~/.profile」ってファイルに書けばいいらしい。
「~/」はホームディレクトリのことらしい。
ファイルの一番下に以下を追加すればいい。

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

ちなみに、APTによるインストールはARMに対応していない

こちらの記事によると、apt-getコマンドで簡単にインストールできると書いてあるけど、APTによるインストールはRaspberry piの採用しているCPUであるARMには対応していない。
記事の「APT のトラブルシューティング」の項に記述がある。
https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-debian?WT.mc_id=IoT-MVP-5002686

しごぶしごぶ

(VNC経由だと?)Raspberry pi上のVS Codeは使い物にならない

私はCUIが苦手なので、GUIでできる部分は全部GUIにしたです。
なので、Raspberry piもVNCを使ってリモート操作できるようにしました。

.NET 6がインストールできたので、VS Codeをインストールし、開発を始めようと思いました。
しかし、VS Codeでターミナルを開き、コマンドを実行しようとキーボードを叩くと、文字は表示されません。少し待つと、バババと叩いたキーの文字が表示されました。ラグすぎます。
テキストエディタ部分は触っていませんが、ターミナルがこれでは使い物になりません。

Raspberry pi上でVS Codeを使うのはあきらめました。

他の人の記事によると、割とスムーズに動作しているようです。
VNCが重いのでしょうか?要検証です。
https://qiita.com/karaage0703/items/fb50b6ac5c175b9b1045

しごぶしごぶ

IntelliSenseが使えない

Raspberry pi上でVS Codeを使うのはあきらめたわけですが、ではどうやって開発をするのか。

Remote Development拡張機能を使用して、WindowsのVS Codeから遠隔操作することにしました。
https://qiita.com/c60evaporator/items/26ab9cfb9cd36facc8fd

こんな便利な機能があったのかと驚いたわけですが、これで使用すると、IntelliSenseが使えませんでした。使用したい拡張機能は、サーバー側(Raspberry pi)にインストールする必要があるらしいので、C#の拡張機能を「install in SSH:」ボタンを押してインストールします。すると、右下に「ARMでは使えません」的なポップアップが表示されます。

しごぶしごぶ

結局、Sambaを使う

IntelliSenseが使えないので、Remote Developmentは使えません。
となると、Windowsのローカル環境でVS Codeを使用するしか無さそうです。

Raspberry piとWindowsでファイルを共有して作業するのが良さそうです。
Raspberry piをファイルサーバーにするつもりは無かったのでSambaは入れてなかったのですが、Sambaを使用してファイルを共有します。

Sambaを使用すると、WindowsからRaspberry piのファイルが見えるので、そのままエクスプローラの「Codeで開く」から開いて作業ができます。

ビルド等は、SSHでRaspberry piに接続してビルドを行います。
最近のWindowsでは、コマンドプロンプトからSSH接続ができるので、VS CodeのターミナルでSSH接続しちゃうといいかもしれません。

Windowsからlinux用にビルドできるので、そのままビルドします。

しごぶしごぶ

ARM対応C#拡張機能のプレ版

VS CodeのC#拡張機能は、OmniSharpってプロジェクトらしい。
https://github.com/OmniSharp/omnisharp-vscode

githubのissueを見てみると、すでに議論がされていて、探すとすでにARM対応プレリリース版があるらしいことに気づいた。
https://github.com/OmniSharp/omnisharp-vscode/issues/2771#issuecomment-971199197
https://github.com/OmniSharp/omnisharp-vscode/releases/tag/v1.23.18-beta1

これで、Raspberry pi上でIntelliSenseが使える用になる!?

しごぶしごぶ

Samba使っているのならWindowsでビルドしてDLLをRaspberry piへコピーすればいいんじゃね?

そのまま↓に書いてある方法が簡単っぽい?
https://docs.microsoft.com/ja-jp/dotnet/iot/deployment

ってか、Raspberry piのディレクトリでビルドするのだから、成果物はRaspberry pi上にできるわけで、コピーすらいらない。

しごぶしごぶ

VS CodeのC#拡張機能Linux arm版は、名前から察するに64bit版。
Raspberry Pi Imager使ってインストールできるのは、32bit版。
一応、vsixファイルをダウンロードしてインストールしてみたけど、使えなかった。

Raspberry pi osの64bit版をインストールしてみて、再挑戦してみる。

しごぶしごぶ

Raspberry Pi osの64bit版とVS CodeのC#拡張機能Linux arm版でいけた

Raspberry Pi osの64bit版を入れて、VS CodeのC#拡張機能Linux arm版を入れたら、IntelliSenseが動いた。
Remote Development拡張機能でも機能した。

以下の組み合わせが最適解っぽい
Raspberry Pi os 64bit版
VS Code + C#拡張機能Linux arm版 + Remote Development拡張機能