個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Xamarin に関する事を中心に書いています。 Microsoft MVP for Development Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

.NET Framework から .NET 6 への移行時に便利なツール、.NET アップグレード アシスタント(利用方法)

使い方

.NET アップグレード アシスタントは .NET CLI ツールです。PowerShell のようなコマンド シェル上で利用します。
インストール、アンインストールの方法は以下の通りです。
 

インストール
dotnet tool install -g upgrade-assistant

 

アンインストール
dotnet tool uninstall -g upgrade-assistant

 
-g パラメーターを指定すると、PATH 環境変数に自動的に追加される既定の場所(%USERPROFILE%\.dotnet\tools)にツールがインストールされます。

インストール手順に関する Microsoft Docs は、以下を参照下さい。
docs.microsoft.com
 

ツールのアップデート

ツールをしばらく使用してなかった場合は、アップデートをしておきます。

dotnet tool update -g upgrade-assistant

 
 

アプリケーションのアップグレードの方法

アップグレードを行うには、PowerShell のようなコマンド シェルを開き、アップグレードを行いたいソリューションやプロジェクトが配置されているフォルダーに移動します。

アップグレードを行いたいソリューションやプロジェクトを指定して、 以下のコマンドを実行します。

upgrade-assistant upgrade .\WinFormsAppNetFramework.sln

 
以下のような感じで、これからアップグレードで行う処理の一覧と現在のステップで行う処理に対する選択肢が表示されます。
それぞれのステップで希望する選択肢を選んでいくとアップグレードが完了します。
f:id:hiro128:20220302225156p:plain


それぞれのステップの処理の内容は以下の通りです。

1. Back up project プロジェクトをバックアップします
2. Convert project file to SDK style csprojファイルを .NET Framework の非SDKスタイルから .NET の SDKスタイルへ変換します
3. Clean up NuGet package references パッケージ参照を分析し、packages.config ファイルから不要な参照を削除します
4. Update TFM TFM(ターゲット フレームワーク モニカー)を適切なものに更新します
5. Update NuGet Packages プロジェクトのNuGetパッケージを、必要に応じてステップ4で変更されたTFMをサポートするバージョンに更新します
6. Add template files テンプレートファイルがある場合に自動で追加します
7. Update Winforms Project Windowsフォーム固有の処理を行います
  a. Default Font API Alert デフォルトフォントが変更されたため対処が必要であることをこのツールを使っているユーザーに認識してもらうためにツールの画面表示で通知します。(アプリケーションのソースコードは変更されません。)
  b. Winforms Source Updater Program.cs に、高DPIモードを設定するSetHighDpiModeメソッドの呼び出しを追加します
8. Upgrade app config files app.config ファイルの内容を更新します
  a. Convert Application Settings appsettings.jsonファイルに移行する必要がある設定が存在すれば移行します
  b. Convert Connection Strings appsettings.jsonファイルに移行する必要がある接続文字列が存在すれば移行します
  c. Disable unsupported configuration sections .NET 6 でサポートされない設定が存在すれば無効化します
9. Update source code ソースコードを更新します
  a. Apply fix for UA0002: Types should be upgraded (本ツールで認識できる)更新が必要な型が存在すれば更新します
  b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist .NET でサポートされていない UnsafeDeserialize()が存在すれば更新します
10. Move to next project ソリューション内の次のプロジェクトに移動します

 
上記の通り、かなりの定型的作業を自動化してくれます。
 
アップグレードの手順に関する Microsoft Docs は以下を参照ください
docs.microsoft.com
 
 

変換後のソリューションを Visual Studio 2022 で開く

変換後のソリューションを Visual Studio 2022 で開くと以下の画像ように、問題がある箇所に警告が出ます。また、自動で変換できなかった箇所に問題があればビルドするとエラーになります。
f:id:hiro128:20220303123458p:plain
 
この

  • 警告が出ている箇所
  • ビルドエラーが出る箇所

が手作業で修正が必要な部分となりますので、集計することで必要な手作業のおおよその作業量がわかります。
また、実際の移行を行うときはこれらの箇所を修正します。