.NET Framework から .NET への互換性評価と移植支援を行うツール「Porting Assistant for .NET」が VB.NET をサポートしました

2022.07.19

いわさです。

AWS より提供されている Porting Assistant for .NET が VB.NET をサポートしました。

.NET = C# のような文脈になってることもあって、「あのツールが VB.NET だと使えなかった」というシーンもあります。
Porting Assistant for .NET でも C# のみサポートされていたのですが、この度 VB.NET がサポートされました。

本日は使い方をご紹介します。

Porting Assitant for .NET とは

.NET Framework から .NET への互換性の評価と移植を支援してくれる無料のツールです。
AWS から提供されていますが、AWS に関係なくすべてのワークロードで利用が可能です。

互換性評価では、.NET Framework プロジェクトをスキャンし、ソースコードとパッケージ (NuGet など) を分析して互換性評価レポートを生成します。
移植支援では、パッケージを最新の互換性のあるバージョンにアップグレードし、プロジェクトを .NET Core 互換形式に変更します。

完全にソースコードのリファクタリングが不要になるわけではないのですが、機械的にコンバート可能な部分の変換と、手動リファクタリングに役立つ互換性レポートを入手することが出来るため、白紙でリファクタリングに挑むよりも効率的に作業を進めることが出来るようになります。

本ツールは、このブログでも何度か C# で使ったことがあります。

VB.NET でためしてみる

移行前のアプリケーションをまず準備します。
Porting Assistant for .NET は Windows 10 または Windows Server 2016 以降で利用が可能です。
サポートされている .NET Framework バージョンは 3.5 以降となっています。
移行先 .NET (Core) プラットフォームのバージョンは、.NET 6.0 / .NET 5.0 / .NET Core 3.1 です。

アプリケーションは Windows 10 にて Visual Studio 2022 を使って、VB.NET のコンソールアプリケーションを用意します。
フレームワークは .NET Framework 4.7.2 にしました。

ほぼデフォルトですが、以下のようにCLRバージョンを取得してコンソールへ出力するようにしておきます。

Module Module1

    Sub Main()

        Console.WriteLine(Environment.Version)
        Console.ReadKey()

    End Sub

End Module

実行すると以下のようになります。

.NET Framework のバージョンと少し異なっているようですが、以下のとおり .NET Framework の場合は4.0.30319.42000が出力されるのが正しいです。

.NET Framework 4.6 以降のバージョンと、3.0 より前の .NET Core バージョンの場合は、フォーム4.0.30319.42000があります。

評価と移植

Porting Assistant for .NET は以下のページからインストーラーをダウンロード出来ます。

インストール後、実行するとターゲットフレームワークをまずは選択します。
今回は .NET 6.0 を選択してみます。

Assess

続いてツールでソリューションを読み込みます。
.slnを選択し、Assessを行うとソリューションの互換性評価が開始されます。

以下のようにソリューションのプロジェクトやパッケージやAPIの互換情報を取得することが出来ます。

シンプルなプロジェクトなので互換性のない部分はありませんでしたが、実際に利用する際はいくつもの非互換情報が確認出来ると思いますので、個別に対応方針を定めることになります。

Port

続いて、移植を実行します。
ソリューションを選択して、Port solutionを押下します。

変換されたものは既存ソリューションを置き換えるか、別のソリューションとして新しい場所へコピーするかを選択することが出来ます。

コード修正し実行出来る状態へ

Porting Assistant for .NET での移植が完了したら、移植後のソリューションを開きリファクタリングを行います。

ここでは、My Projectに起因するビルドエラーが発生していました。

エラー:BC30002 型'Global.System.Configuration.ApplicationSettingsBase'は定義されていません。
hogehoge\My Project\Settings.Designer.vb

今回は、移行後不要になるのでプロジェクトから除外しました。実際にはそう単純ではなくひとつひとつ精査して対応が必要になるでしょう。

最後に、アプリケーションの種類をクラスライブラリにして、スタートアップオブジェクトでModule1.vbを選択して実行します。

実行出来ました。
新たなプラットフォーム6.0.6が出力されていますね。

さいごに

本日は VB.NET でも Porting Assistant for .NET が使えるようになったので試してみました。

「また C# だけか...」なんて思ってこれまでスルーしていた方、是非お試しください。
AWS のワークロードに限らず広く使えるツールですので是非使ってみてほしいです。