.NET アップグレード アシスタントを利用して .NET Framework から .NET 5 に超簡単アップグレード 【Windows Forms】

こんにちは！

本記事では、.NET Framework で作成された Windows Forms アプリケーションを .NET 5 にアップグレードする方法について紹介します。


## .NET 5 へ移行を計画している方へ

.NET 5 が2020年にリリースされました。

.NET 5 の登場と共に  .NET Framework シリーズは、.NET Framework 4.8 が最後のメジャーアップデートであり、以降は新規機能の実装が行われません。

そのため、近い将来、現行の .NET Framework で作成されたアプリケーションは .NET 5 へ移行を検討する必要があります。

特に、今年 (2021年) は LTS (Long Term Support) の対象である .NET 6 がリリースされますので、.NET 6 をターゲットに移行計画を予定されている方も多いのではないでしょうか？

また、移行計画を立案する際に、気になるのは移行コストですね。

.NET Framework と .NET 5 は、基本的にコード互換性はあるものの、一部の API 廃止や、プロジェクトファイルの構成の変更など、移行コストは決してゼロではありません。

その移行コストをなるべく抑え、移行作業を手助けしてくれる .NET アップグレード アシスタントというツールがあります。

https://docs.microsoft.com/ja-jp/dotnet/core/porting/upgrade-assistant-winforms-framework

.NET アップグレード アシスタントは  .NET Framework  のアプリケーションを .NET にアップグレードするツールです。

本記事では .NET アップグレード アシスタントを活用し、Windows Forms のサンプルコードに対して「簡単にアップグレードできるのか？」をデモしたいと思います。


## Windows Forms のサンプル

今回、アップグレード用に用意したサンプルです。

シンプルな入力フォームが配置されたアプリケーションで、送信ボタン押下時のイベントの処理として、メッセージボックスを表示しています。

![wf01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/68cfe2e6-1883-b79d-bc87-ef41b6223cee.gif)


## .NET アップグレード アシスタント 

### .NET アップグレード アシスタント のインストール

.NET アップグレード アシスタントのインストール方法については、チュートリアルサイトにて紹介されていますので、ご確認ください。

https://dotnet.microsoft.com/platform/upgrade-assistant/tutorial/intro

> もしインストール失敗する場合は、下記コマンドもお試しください。
> "dotnet tool install -g upgrade-assistant --ignore-failed-sources"
> Github の説明によると、Nuget の設定によりインストールでエラーになる可能性があり、上記コマンドで回避出来ます。
> https://github.com/dotnet/upgrade-assistant

###  .NET アップグレード アシスタントの実行コマンド

コマンドライン上で、upgrade-assistant コマンドを実行します。

ソリューション、または、プロジェクトファイルを対象に実行します。

```
upgrade-assistant <MySolution.sln>
```

```
upgrade-assistant <MyProject.csproj>
```

###  .NET アップグレード アシスタントの実行デモ

それでは .NET Framework の Windows Forms アプリケーションに対して .NET アップグレード アシスタントを実行してみます。

```
upgrade-assistant WindowsFormsApp.sln
```

#### 1) Back up project

まずは、バックアップを取得するか？について確認が行われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/a08bbdac-6523-7562-9aab-e5b107d634a5.png)


#### 2) Convert project file to SDK style

次に、プロジェクトファイルのコンバートが行われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/74e9c837-fc7e-78a4-2145-19a268526b69.png)


#### 3) Clean up Nuget package references

Nuget パッケージのクリーンが行われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/1364f5a8-a89c-61e2-90df-d72f210a23ad.png)


#### 4) Update TFM

TFM (Target Framework) の更新が行われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/0c5a10d9-de75-7206-3def-7d7e138df9ad.png)


#### 5) Update Nuget Packages

Nuget パッケージの更新が行われます。

.NET 5 で動作するために、必要な Nuget のパッケージなどが追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/9fd33126-0a70-3307-97d5-f950579dba91.png)


(このステップは、処理時間が掛かりました (5分ほど)、大規模なプロジェクトであれば、より時間がかかるかもしれません)

#### 6)～8)は自動実行 

.NET 5 の動作に必要なコンフィグファイルの追加や、.NET 5 の C# コードで更新が必要のソースコードに対して、残りの更新が行われます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/2d4a63c6-0ece-fcff-b139-0927387db220.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/81a887f7-f211-a286-efcc-0be9e4abd395.png)



### アップグレード前後の変更内容の比較

以下、アップグレード前後の比較内容です、変更があったファイルはオレンジ色でハイライトされています。
変更が発生したソースコードは、プロジェクトファイルのみでした。
(左が .NET Framework / 右が .NET 5)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/60ce9702-8575-a343-c90d-cb0fe2dd21cc.png)

プロジェクトのファイルのは、変更前後で比較すると、コード量は 83行 -> 16行と、かなりコンパクトになりました。

軽量化された原因は、主に以下となります。

・各ソースコードのファイルパスの記載が .NET 5 のプロジェクトでは不要になった ( .NET 5 の場合は、ディレクトリ(サブディレクトリ含む)にあるファイルが、自動的に管理対象となるため)

・.NET Framework 時点では、参照設定する必要があったアセンブリ (System.Xml / System.Core など) が .NET 5 では Nuget のパッケージでまとめられた

## ビルド&動作確認

それでは、ツールによりアップグレードが完了したので、ビルドおよび動作確認をしてみましょう。

まずは、アップグレードされたソリューションファイル (*.sln) を開いてみます。

念のため、対象のフレームワークが ".NET 5.0" に更新された確認してみます。無事アップグレード出来ていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/a9cbce6b-052b-9d3e-25f6-a987b0ab1b36.png)

それでは、ビルド＆デバッグを実行してみます。正常にアプリケーションが起動できました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48623/628d4b93-e9d2-015c-c902-175747c89e75.png)


## まとめ

本シリーズを通して .NET アップグレード アシスタントを利用して WPF、ASP.NET MVC、そして Windows Forms アプリケーションのアップグレードについて、記事にしてきました。

https://blogs.jp.infragistics.com/entry/wpf-upgrade-assistant

https://blogs.jp.infragistics.com/entry/asp.netmvc-upgrade-assistant

これから先、.NET 5 または .NET 6 への移行する機会が増えてくるかと思います。

.NET アップグレード アシスタントは、コマンド１つで非常に簡単にアップグレードを支援してくれますので、ぜひ試してみてください！

## Ultimate UI for Windows Forms トライアル版を利用するには

.NET 5対応の <a href="https://jp.infragistics.com/products/windows-forms" target="_blank">Ultimate UI for Windows Forms</a> は、データグリッド、高性能チャート、Microsoft® OfficeライクなUIを実現するツール、ダッシュボード、レポートなど、100種類以上のタッチジェスチャー対応UIコントロールを収録した、デスクトップアプリケーション開発に最適なライブラリーです。.NET 5に対応。

https://jp.infragistics.com/products/windows-forms

Ultimate UI for Windows Forms は<a href="https://jp.infragistics.com/products/windows-forms/download" target="_blank">トライアル版</a>での試用が可能です。<br>

製品に関する技術的な問い合わせは <a href="https://iam.infragistics.com/Account/Register" target="_blank">こちらのページ</a> よりアカウントの作成を行ってください。登録より30日間、弊社のテクニカルサポートをご利用いただくことが出来ますのでお気軽にお問い合わせください。<br>

また、製品をご購入をご検討のお客様は <a href="https://jp.infragistics.com/how-to-buy" target="_blank">こちらのページ</a> より


## 開発全般に関するご相談はお任せください！

インフラジスティックス・ジャパンでは、各開発プラットフォームの技術トレーニング、コンサルテーションの提供、開発全般のご支援を行っています。


https://jp.infragistics.com/service-and-support/professional-service



「古い技術やサポート終了のプラットフォームから脱却する必要があるが、その移行先のプラットフォームやフレームワークの検討が進まない、知見がない。」

「新しい開発テクノロジーを採用したいが、自社内にエキスパートがいない。日本語リソースも少ないし、開発を進められるか不安。」

「自社のメンバーで開発を進めたいが、これまで開発フェーズを外部ベンダーに頼ってきたため、ツールや技術に対する理解が乏しい。」

「UIを刷新したい。UIデザインやUI/UXに関する検討の進め方が分からない。外部のデザイン会社に頼むと、開発が難しくなるのではないか、危惧している。」

といったご相談を承っています。

お問い合せは<a href="https://jp.infragistics.com/about-us/contact-us#contactform" target="_blank">こちら</a>からお気軽にご相談ください。

## 技術サポート・無料オンライン相談会をご利用ください

インフラジスティックスのUI製品は多くの機能を備えているためドキュメントの情報量も多く、なかなかお探しの情報に辿り着けない場合もあります。そういった際はお気軽に技術サポートや、製品導入支援担当との無料オンライン相談会をご予約いただくことで検証時間を節約可能ですので、ぜひご活用ください。<br>
<a href="https://jp.infragistics.com/support/dev-support" target="_blank">技術サポートへの問い合わせ方法を確認する</a><br>
<a href="https://jp.infragistics.com/free-consultation" target="_blank">無料オンライン相談会を予約する</a>