おいちゃんのおぼえがき

仕事のTipsをメモするブログ

.NET 5 とか 6 とかで SerialPort

2022-03-10 | Win
実に久しぶりの投稿です(^.^)。
今までずっと古い環境で開発してたけど、久しぶりにリニューアル!!ってことで、Windows11 に VisualStudio 2022 を入れてアプリ作ってみた。
組み込み系やってる関係でシリアルポートをよく使うんだけど、VisualStudio 2019 で .NET Framework 4.x 使ってた時はフォームデザイナで SerialPort をドラッグして貼り付けて・・・、でおしまいだったんですよ。
ところが、Win11 + VS2022 では新規プロジェクトを .NET Framework 4.x で作れない、みたい・・・。古いプロジェクトを開いてビルドはできるけど、新規では .NET 5.0/6.0 とか .NET Core 3.0 とか (シレッと名前から Framewor のくだりが消えてたりする) しかなくて、.NET 5.0 で新規作成するとツールボックスのコンポーネントに SerialPort が出てこない・・・。
ドキュメントには普通に System.IO.Ports ・・・が載ってるのでなくなったわけではなさそう、って事でいろいろ調べてみた。
どうやら .NET Core や 5.0 はデフォルトでは System.IO.Ports は読み込まれなくなってるらしく、SerialPort 使うには明示的に取り込まねばならんって事に。
で、たぶん忘れるのでメモしとかないとね。

まずパッケージの追加ってのが必要。「プロジェクト」-「NuGet パッケージの管理…」から「参照」タブの検索ボックスに "System.IO.Ports" を入れるといろいろ出てくるので一番上 "System.IO.Ports" 選んでインストール。これで SerialPort は使える様になるみたい。ただ、ツールボックスには出てこないので、全部コードで書かないとね。
ソースのアタマに using System.IO.Ports; を入れてメインフォームのコンストラクタ InitializeComport(); の後ろあたりに次のコードを追加する。
  // class member
  System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort(new System.ComponentModel.Container());
...
  public Form1() {
   InitializeComponent();
   ...
   // setup SerialPort
   port.BaudRate = 115200;
   port.DataBits = 8;
   port.StopBits = StopBits.One;
   port.Parity = Parity.None;  // ここらは GUI でいつもやってたプロバティの設定だよ
   ...

こうやって、やっと使える様になったのよ。  
「いや、そんなことせんでもこうしたら簡単やで・・・」ってのがないかな〜。
(後日追加)
後になってわかったけど新規プロジェクト作る時、プロジェクトテンプレートから「Windows フォームアプリ」ってのを選ぶと上に書いた感じだけど、
「Windows フォームアプリケーション (.NET Framework)」を選ぶと今まで通り .NET Framework 4.xx が使えて、ちゃんと SerialPort もツールボックスに出てくることがわかったょ。.NET とか .NET Core だとダメだったんだね〜(^_^;)