つい先日、 .NET Framework ベースのアプリケーションを .NET 5 に移行するための便利ツールが登場しました。 .NET Blog でも紹介されていました。
今回はこいつを軽く触ってみた感想とか、できること、できないことを軽く整理してみようと思います。 なお今回紹介しているのは、 2020/03/03 時点の最新版に基づく情報です。 本日時点ではプレビュー扱いであるため、今後大幅に変更される可能性もありますので、注意してください。
- 環境
- .NET SDK のインストール
- try-convert ツールのインストール
- .NET Upgrade Assistant のインストール
- .NET Upgrade Assistant の実行
- できること、できないことがある
- ASP.NET MVC、WPF、Windows フォームに対応
環境
- dotnet 5.0.103
- try-convert 0.7.212201
- upgrade-assistant 0.2.212405
.NET SDK のインストール
コマンドプロンプトを開いて以下のコマンドを実行します。
dotnet
インストールができていれば dotnet コマンドの使い方が出力されます。 コマンドが見つからない、といったエラーになった場合は、以下のページからインストーラを取得して、導入してください。 導入後は再起動しておいた方が良いです。
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 MVC、WPF、Windows フォームに対応
公式ドキュメントでは、.NET Framework ベースの ASP.NET MVC、WPF、Windows フォームアプリケーションを、 .NET 5 ベースに変換できると説明されています。 きっとできることはこれからどんどん増えていくと思います。 今後のアップデートとGAに期待しましょう。