移植するアプリケーションについて
シリアル通信を行い、通信内容を解析、結果を画面表示するようなアプリケーションで、
SerialPort クラスを使用。
事前準備
-
.NET Core環境を以下の記事で構築。
https://qiita.com/takmot/items/19fab3a4b89a33bb8930 -
.NET Framework環境としてVisual Studio 2019をインストール。
-
Visual Studio 2019上でアプリケーションがビルド、起動できることを確認。
移植手順
以下の公式ドキュメントを参考に進める。
https://docs.microsoft.com/ja-jp/dotnet/core/porting/
1. Visual Studio の変換ツールを使用してpackages.config の依存関係を PackageReference 形式に変換
-
Visual Studio 2019上でpackages.configファイルを右クリックし、
packages.configをPackageReference
に移行するを選択する。
-
完了するとソリューションファイルと同じパスにMigrationBackupフォルダが出来上がる。その中のNuGetUpgradeLog.htmlを確認。成功している場合、以下のように表示される。
-
再度Visual Studio 2019上でアプリケーションをビルドし問題ないことを確認。
2. プロジェクトファイルを.NET Core形式に変換
プロジェクトファイルの変換にはdotnet try-convert
を使用する。
github:https://github.com/dotnet/try-convert/releases
-
githubページのHow To Installに従って以下でtry-convertをインストールする。
dotnet tool install -g try-convert
インストールが完了すると以下のように表示される。
-
プロジェクトファイルの変換
-
プロジェクトファイルを対象とする場合
try-convert -p <.csproj のファイルパス>
-
ソリューションファイルを対象とする場合
try-convert -w <.sln のフォルダパス>
3. SerialPort クラスの対応
上記1,2で一旦変換は完了したが、.NET Coreでビルドdotnet build
を行うとエラーが発生。
型名 'SerialPort' は名前空間 'System.IO.Ports' に見つかりませんでした。
以下の公式ドキュメントを確認すると、.NET Core 3.1ではSerialPort クラスは対応しておらず、.NET Platform Extensionsのページにリダイレクトされる。
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.ports.serialport?view=dotnet-plat-ext-3.1&viewFallbackFrom=netcore-3.1
Windows 互換機能パックを以下ページに従ってインストール。
https://www.nuget.org/packages/Microsoft.Windows.Compatibility
dotnet add package Microsoft.Windows.Compatibility --version 3.1.1
これでSerialPortのエラーが解消しビルドが通ることを確認。