ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

.NET Framework ベースのアプリケーションを .NET 5 ベースへと更新サポートするツール(upgrade-assistant)

f:id:masatsuna:20210303121532p:plain

つい先日、 .NET Framework ベースのアプリケーションを .NET 5 に移行するための便利ツールが登場しました。 .NET Blog でも紹介されていました。

devblogs.microsoft.com

今回はこいつを軽く触ってみた感想とか、できること、できないことを軽く整理してみようと思います。 なお今回紹介しているのは、 2020/03/03 時点の最新版に基づく情報です。 本日時点ではプレビュー扱いであるため、今後大幅に変更される可能性もありますので、注意してください。

環境

  • dotnet 5.0.103
  • try-convert 0.7.212201
  • upgrade-assistant 0.2.212405

.NET SDK のインストール

コマンドプロンプトを開いて以下のコマンドを実行します。

dotnet

インストールができていれば dotnet コマンドの使い方が出力されます。 コマンドが見つからない、といったエラーになった場合は、以下のページからインストーラを取得して、導入してください。 導入後は再起動しておいた方が良いです。

dotnet.microsoft.com

try-convert ツールのインストール

以下のコマンドを実行して、 try-convert ツールをインストールします。

dotnet tool install -g try-convert

インストールが正常に完了すると、以下のようなメッセージが出力されます。

次のコマンドを使用してツールを呼び出せます。try-convert
ツール 'try-convert' (バージョン '0.7.212201') が正常にインストールされました。

.NET Upgrade Assistant のインストール

以下のコマンドを実行して、 .NET Upgrade Assistant をインストールします。

dotnet tool install -g upgrade-assistant

インストールが正常に完了すると、以下のようなメッセージが出力されます。

次のコマンドを使用してツールを呼び出せます。upgrade-assistant
ツール 'upgrade-assistant' (バージョン '0.2.212405') が正常にインストールされました。

2020/03/03 現在、どちらのツールもプレビュー版扱いなので、メジャーバージョンは 0 になっていますね。

.NET Upgrade Assistant の実行

ソリューションファイルのあるディレクトリに移動して、以下のコマンドを実行します。

upgrade-assistant <*.sln のファイル名>

実行すると、ソリューションに含まれているプロジェクトの一覧が出力されます。 エントリーポイントに相当するプロジェクトの番号を入力して作業を開始します。

-----------------------------------------------------------------------------------------
- Microsoft .NET Upgrade Assistant v0.2.212405+8e7b4314944e5328780f06f20721a4d6ef9783bb -
-----------------------------------------------------------------------------------------

[09:45:11 INF] MSBuild registered from C:\Program Files\dotnet\sdk\5.0.103\
[09:45:11 INF] Registered 1 extensions:
        Default extension
[09:45:13 INF] Initializing upgrade step Select an entrypoint

Upgrade Steps

1. [Next step] Select an entrypoint
2. Select project to upgrade

Choose a command:
   1. Apply next step (Select an entrypoint)
   2. Skip next step (Select an entrypoint)
   3. See more step details
   4. Configure logging
   5. Exit
> 1
[09:46:58 INF] Applying upgrade step Select an entrypoint
Please select the project you run. We will then analyze the dependencies and identify the recommended order to upgrade projects.
   1. CoreProject
   2. WebProject
   3. WpfProject
> 3
[09:49:06 INF] Upgrade step Select an entrypoint applied successfully
Please press enter to continue...

以降このような形で、出力される選択肢の中から番号を選択して、変換作業を行っていくことになります。 今のところ、以下のような処理が実行できるようです。

1. Back up project
2. Convert project file to SDK style
3. Update TFM
4. Update NuGet packages
5. Add template files
6. Upgrade app config files
    a. Convert Application Settings
    b. Disable unsupported configuration sections
    c. Convert system.web.webPages.razor/pages/namespaces
7. Update C# source
    a. Apply fix for UA0001: ASP.NET Core projects should not reference ASP.NET namespaces
    b. Apply fix for UA0002: HtmlString types should be replaced with Microsoft.AspNetCore.Html.HtmlString
    c. Apply fix for UA0003: ActionResult types should come from the Microsoft.AspNetCore.Mvc namespace
    d. Apply fix for UA0004: Filter types should be used from the Microsoft.AspNetCore.Mvc.Filters namespace
    e. Apply fix for UA0005: Do not use HttpContext.Current
    f. Apply fix for UA0006: HttpContext.DebuggerEnabled should be replaced with System.Diagnostics.Debugger.IsAttached
    g. Apply fix for UA0007: HtmlHelper should be replaced with IHtmlHelper
    h. Apply fix for UA0008: UrlHelper should be replaced with IUrlHelper
    i. Apply fix for UA0009: HelperResult should be replaced with Microsoft.AspNetCore.Mvc.Razor.HelperResult
    j. Apply fix for UA0010: [AllowHtmlAttrubute] should be removed

変換作業が完了したら、アプリケーションコードを手で直して、実行できるように修正していきます。 変換作業が完了しただけの状態だと、コンパイルすら通らない状態になります。 コードの手修正はほぼ必須となります。

できること、できないことがある

このツールを実行すると、ターゲットフレームワーク .NET 5 に設定してくれます。 NuGet パッケージの更新作業もある程度やってくれます。 Program.cs や Startup.cs を生成してくれます。 また Web.config に設定してあった AppSettings の内容を appsettings.json に移してくれます。 他にもいくつか、定型的な変換作業を実施してくれます。 逆に言うと、それ以外のことはできません。 アプリケーションコードがコンパイルできる状態まで更新してくれるわけではありません。 そういう意味で、過度な期待は禁物です。 決して魔法のツールではありません。

このツールは、 .NET Framework のアプリケーションを .NET 5 に持っていくために必要な、最低限の作業をやってくれる印象です。 使いこなすためには、以下のような知識が個人的には必要と思いました。

  • .NET Framework アプリケーションの仕組み
  • もともとのアプリケーションの構造
  • .NET 5 アプリケーションの基本的な仕組み

要するに、わかっている人が使うなら超便利なんですが、わかっていない人が使うとわけわからん、となるように思います。

ASP.NET MVCWPFWindows フォームに対応

公式ドキュメントでは、.NET Framework ベースの ASP.NET MVCWPFWindows フォームアプリケーションを、 .NET 5 ベースに変換できると説明されています。 きっとできることはこれからどんどん増えていくと思います。 今後のアップデートとGAに期待しましょう。