インフラジスティックス・ジャパン株式会社Blog

インフラジスティックス・ジャパン株式会社のチームメンバーが技術トレンド、製品Tips、サポート情報からライセンス、日々の業務から感じることなど、さまざまなトピックについてお伝えするBlogです。

.NET Framework 4.8 で作成した WPF アプリケーションを .NET 6 にアップグレードする ~ Step 2: .NET アップグレード アシスタントでアップグレードする ~

こんにちは! インフラジスティックス・ジャパン テクニカルコンサルティングチームの石橋です。

このシリーズ記事では「.NET Framework 4.8 で作成した WPF アプリケーションを .NET 6 にアップグレードする」と題して、.NET アップグレード アシスタントを使って .NET Framework 4.8 で作成した WPF アプリケーションを .NET 6 にアップグレードする方法を 4 回にわけて書いていきたいと思います。

今回はいよいよ「Step 2: .NET アップグレード アシスタントでアップグレードする」です。

Step 0: はじめに -- 出発点となる .NET Framework 4.8 WPF アプリケーションの説明
Step 1: 実行環境を準備する
Step 2: .NET アップグレード アシスタントでアップグレードする (今回はここ)
Step 3: .NET アップグレード アシスタントでアップグレードできない部分を手動で置き換え、ビルドする

このブログで使用する WPF アプリケーションのソース コードは GitHub にあります。

https://github.com/igjp-sample/WPF_DotNetFramework2DotNet_UpgradeAssistance

前回 Step 1 の終わり時点のアプリケーションは、./Step1/ScoreSheets_SampleWPFApplication です。これをローカルにダウンロードして読み進めてください (※ 前回 Step 1 の記事の「.NET SDK 6」の節を見ながら、.NET SDK 6 が使用される環境かどうかの確認は必ずしてください)。この記事では C:\ のすぐ下に Step1\ScoreSheets_SampleWPFApplication フォルダーがあり、この下にソリューション ファイルとプロジェクト フォルダーがあるという想定で進めていきます。

では早速アップグレードしていきましょう。

 

 

.NET アップグレード アシスタントを使ってソリューションを .NET Framework 4.8 から .NET 6 にアップグレードする。

マイクロソフトの公式ガイド

マイクロソフトが出している公式のガイドはこちらです。

learn.microsoft.com

この記事でもこのガイドにしたがってアップグレードしていきたいと思います。

アプリケーションを分析する

まず最初にアプリケーションを分析します。アップグレードする前もしくは後に必要な変更点があるか確認できます。コマンド プロンプトを起動し、"upgrade-assistant analyze .slnファイル名" コマンドで分析します。

今回のアプリケーションおよび環境で分析してみた結果です。

コンソール
C:\Step1\ScoreSheets_SampleWPFApplication>upgrade-assistant analyze .\ScoreSheets_SampleWPFApplication.sln
-----------------------------------------------------------------------------------------------------------------
Microsoft .NET Upgrade Assistant v0.4.355802+b2aeae2c0e41fbfed35df6ab2e88b82a0c11be2b

We are interested in your feedback! Please use the following link to open a survey: https://aka.ms/DotNetUASurvey
-----------------------------------------------------------------------------------------------------------------

[xx:xx:xx INF] Loaded 9 extensions
[xx:xx:xx INF] Using MSBuild from C:\Program Files\dotnet\sdk\7.0.101\
[xx:xx:xx INF] Using Visual Studio install from C:\Program Files\Microsoft Visual Studio\2022\Professional [v17]
[xx:xx:xx INF] Writing output to C:\Step1\ScoreSheets_SampleWPFApplication\AnalysisReport.sarif
[xx:xx:xx INF] Recommending Windows TFM net7.0-windows because the project either has Windows-specific dependencies or builds to a WinExe
[xx:xx:xx INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.4.355802) needs to be added
[xx:xx:xx INF] Adding Microsoft.Windows.Compatibility 7.0.0 helps with speeding up the upgrade process for Windows-based APIs
[xx:xx:xx INF] Running analyzers on ScoreSheets_SampleWPFApplication
[xx:xx:xx INF] Identified 0 diagnostics in project ScoreSheets_SampleWPFApplication
[xx:xx:xx WRN] Default font in Windows Forms has been changed from Microsoft Sans Serif to Seg Segoe UI, in order to change the default font use the API - Application.SetDefaultFont(Font font). For more details see here - https://devblogs.microsoft.com/dotnet/whats-new-in-windows-forms-in-net-6-0-preview-5/#application-wide-default-font.
[xx:xx:xx INF] Analysis Complete, the report is available at C:\Step1\ScoreSheets_SampleWPFApplication\AnalysisReport.sarif

 

注目すべきは

コンソール
[xx:xx:xx INF] Recommending Windows TFM net7.0-windows because the project either has Windows-specific dependencies or builds to a WinExe

 

の部分です。

Windows TFM net7.0-windows を推奨する、と書かれています。TFM はターゲット フレームワークのことですので、この .NET アップグレード アシスタントは net7.0-windows つまり .NET 7 の Windows 用のアプリケーションにアップグレードするだろうと予測できます。今回は .NET 6 へのアップグレードを考えていますので、.NET アップグレード アシスタントでのアップグレード中かその後に手動で .NET 6 へと変更する必要が出てきそうだと予測できます。

環境によっては違うメッセージが出る場合もあると思います。メッセージをよく読んで、アップグレード前に必要なアクションがあれば対応し、アップグレード後に必要になりそうなアクションがあれば記憶の隅にとどめてくかメモに取っておきましょう。

 

分析が終わったらいよいよアップグレードしていきます。アップグレードは次の順で進んでいきます。

  1. .NET アップグレード アシスタントの起動
  2. バックアップの作成
  3. プロジェクトのアップグレード
  4. NuGet 参照のクリーンアップ
  5. TFM の処理
  6. NuGet パッケージのアップグレード
  7. テンプレート、構成、およびコード ファイル
  8. アップグレードの完了

.NET アップグレード アシスタントの起動

.NET アップグレード アシスタントを起動します。コマンド プロンプトを起動し、C:\Step1\ScoreSheets_SampleWPFApplication に移動し、"upgrade-assistant upgrade .\ScoreSheets_SampleWPFApplication.sln" を実行します。

コンソール
C:\Step1\ScoreSheets_SampleWPFApplication>upgrade-assistant upgrade .\ScoreSheets_SampleWPFApplication.sln

 

まずソリューションが分析されます。複雑なソリューションの場合、エントリポイントの選択やアップグレード対象のプロジェクトの選択などをしていく必要がありますが、今回のアプリケーションはプロジェクト 1 個だけで構成されたシンプルなアプリケーションなので、.NET アップグレード アシスタント側で自動で決めてくれます。

コンソール
Entrypoint: c:\Step1\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication.csproj
Current Project: c:\Step1\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication.csproj

 

そして、アップグレード手順が 1、2、3、... と列挙され、

コンソール
1. [Next step] Back up project
2. Convert project file to SDK style
3. Clean up NuGet package references
    a. Duplicate reference analyzer
    b. Package map reference analyzer
    c. Target compatibility reference analyzer
    d. Upgrade assistant reference analyzer
    e. Windows Compatibility Pack Analyzer

... (中略) ...

 

最後にどのコマンドを実行するか聞かれます。

コンソール
Choose a command:
   1. Apply next step (Back up project)
   2. Skip next step (Back up project)
   3. See more step details
   4. Configure logging
   5. Exit
>

 

そのまま [Enter] キーを押下します。「1. Apply next step 次の手順を適用する」に進みます。

この後も、.NET アップグレード アシスタントの実行結果が表示され、アップグレード手順が列挙され、コマンドを選択するプロンプトが表示される、というのがステップごとに繰り返されていきます。たいていの場合は言われた通りに [Enter] キー押下で次に進む、で先に進めていくことができます。

バックアップの作成

前段で [Enter] キー押下で「次の手順に進む」を選択すると、プロジェクト ファイルのバックアップが起動します。バックアップ先のパスを聞かれますので...、

コンソール
[xx:xx:xx INF] Applying upgrade step Back up project
Please choose a backup path
   1. Use default path [c:\Step1\ScoreSheets_SampleWPFApplication.backup]
   2. Enter custom path
>

 

"1" のパスで問題ないか確認し、そのままでよければ [Enter] キー押下、別の場所に作成したい場合は "2" を入力してパスを指定してください。この記事ではそのまま [Enter] キーを押下します。

すると、バックアップが作成されます。完了すると [Enter] キーを押下するように促されるので、そのまま [Enter] キーを押下します。

コンソール
[xx:xx:xx INF] Backing up c:\Step1\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication to c:\Step1\ScoreSheets_SampleWPFApplication.backup\ScoreSheets_SampleWPFApplication
[xx:xx:xx INF] Project backed up to c:\Step1\ScoreSheets_SampleWPFApplication.backup\ScoreSheets_SampleWPFApplication
[xx:xx:xx INF] Upgrade step Back up project applied successfully
Please press enter to continue...

 

前段の通り、アップグレード手順が 1、2、3、... と再度列挙されるので ([Complete] と [Next step] を見るとどこまで完了して次はどれかがわかります)、

コンソール
1. [Complete] Back up project
2. [Next step] Convert project file to SDK style
3. Clean up NuGet package references
    a. Duplicate reference analyzer
    b. Package map reference analyzer
    c. Target compatibility reference analyzer
... (中略) ...

Choose a command:
   1. Apply next step (Convert project file to SDK style)
   2. Skip next step (Convert project file to SDK style)
   3. See more step details
   4. Configure logging
   5. Exit
>

そのまま [Enter] を押下し、次の「プロジェクトのアップグレード」に進みます。

プロジェクトのアップグレード

次のような内容が出力されます。

コンソール
[xx:xx:xx INF] Applying upgrade step Convert project file to SDK style
[xx:xx:xx INF] Converting project file format with try-convert, version 0.4.355802+b2aeae2c0e41fbfed35df6ab2e88b82a0c11be2b
[xx:xx:xx INF] Recommending Windows TFM net7.0-windows because the project either has Windows-specific dependencies or builds to a WinExe
c:\Step1\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication.csproj contains an App.config file. App.config is replaced by appsettings.json in .NET Core. You will need to delete App.config and migrate to appsettings.json if it's applicable to your project.
[xx:xx:xx INF] Converting project c:\Step1\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication\ScoreSheets_SampleWPFApplication.csproj to SDK style
[xx:xx:xx INF] Project file converted successfully! The project may require additional changes to build successfully against the new .NET target.
[xx:xx:xx INF] Upgrade step Convert project file to SDK style applied successfully
Please press enter to continue...

 

何かエラーがあれば (エラーは赤字などで目立った形で出力されますのですぐわかります) 対応する必要がありますが、今回は特になく、最後に "Upgrade step Convert project file to SDK style applied successfully アップグレード手順「プロジェクト ファイルを SDK スタイルに変換する」の適用に成功しました" と出力もされているので、問題なさそうです。

ただ、ここにも "Recommending Windows TFM net7.0-windows" と出ているので、やはり .NET 7 の Windows 用のアプリケーションになりそうです。

今回は、そのまま [Enter] キーを押下します。

このあと、何回か、次の手順が 1、2、3、... と列挙され [Enter] キーの押下で次の手順に進み、処理内容の出力結果の確認と問題なれれば [Enter] キーを押下し、次の手順が列挙され、...という処理が繰り返されます。毎回繰り返しなので、以降特筆すべき点がない限り、繰り返し部分は省略します。

TFM の処理

コンソール
[xx:xx:xx INF] Applying upgrade step Update TFM
[xx:xx:xx INF] Recommending Windows TFM net7.0-windows because the project either has Windows-specific dependencies or builds to a WinExe
[xx:xx:xx INF] Updated TFM to net7.0-windows
[xx:xx:xx INF] Upgrade step Update TFM applied successfully
Please press enter to continue...

 

やはり "Updated TFM to net7.0-windows" と出力されているので、.NET 7 Windows 用アプリケーションにアップグレードされたようです。別のオプションを選択するステップはなかったので、アップグレード完了後に修正しましょう。

NuGet パッケージのアップグレード

ここはそのまま [Enter] キー押下で進んでいきます。

テンプレート、構成、およびコード ファイル

ここもそのまま [Enter] キー押下で進んでいきます。

アップグレードの完了

ここもそのまま [Enter] キー押下で進んでいきます。

最後に次のように表示されてコマンド プロンプトに戻れば完了です!

コンソール
[xx:xx:xx INF] Upgrade has completed. Please review any changes.
[xx:xx:xx INF] The Upgrade Report is generated at c:\Step1\ScoreSheets_SampleWPFApplication\UpgradeReport.sarif

c:\Step1\ScoreSheets_SampleWPFApplication>

 

ここまでのアプリケーションは
https://github.com/igjp-sample/WPF_DotNetFramework2DotNet_UpgradeAssistance
の ./Step2/ScoreSheets_SampleWPFApplication にありますので、確認してみてください。

次回は .NET アップグレード アシスタントでアップグレードできない部分を手動で置き換え、ビルドしていきます。あともう少しです!

 


 

この記事の内容についてご質問やご不明な点がありましたら、インフラジスティックスのお問い合わせ先までお問い合わせください。

また、こちらからインフラジスティックスの WPF 製品の試用版をダウンロードできます。今回のアプリケーションで使用したコントロール (XamDataTreeXamDataChartXamDataGridExcel エンジン) 等に少しでも興味を持った場合はぜひお試しください。