今回は、AWSからリリースされている「Porting Assistant for .NET」をコマンドラインで実行することに挑戦しました。
「Porting Assistant for .NET」は、.NET Frameworkで開発されたアプリケーションを .NET Coreに移植するためのサポートツールです。無料で使用できます。
GUIアプリケーションを利用した記事はありましたが、OSSなのでコマンドでも実行できるツールを試しました。
利用するツール・動作要件
Code translation assistant https://github.com/aws/cta
を利用します。
Visual Studio が必要です。個人利用であればコミュニティ版などを事前に準備しておきましょう。
今回は以下の環境を利用しました。
Visual Studio: Visual Studio 2022 コミュニティ版
ダウンロードとコンパイル
CTA のサイト https://github.com/aws/cta からリポジトリURLをコピーして git clone を行います。
src フォルダの CTA.Rules.sln ソリューションを Visual Studio で開きます。
メニューからソリューションのビルドを実行します。
コンパイルが完了しました。今回はデバッグビルドで進めました。
作成された実行モジュールと実行
コマンドで実行するモジュールは CTA.Rules.PortCore に作られます。
フォルダを確認すると以下のように CTA.Rules.PortCore.exe が作成されています。
コマンドラインで実行を行ってみます。今回は Visual Stduio で VB.Net 4.8 のWebForm プロジェクトを指定して変換を行いました。
コマンドプロンプトにて CTA.Rules.PortCore.exe を実行します。
-s 引数に元のVB4プロジェクトのソリューションファイルを指定します。
.\CTA.Rules.PortCore.exe -v net8.0 -c true -s C:\Users\masanao\source\repos\ASPNETWebApplication1\ASPNETWebApplication1.sln
多くのメッセージ出力して変換が実行されました。
info: Translator[0]
Archive files that are no longer used in core projects.
info: Translator[0]
Project type: WebForms
info: Translator[0]
Create appsettings.json file using web.config settings
info: Translator[0]
Migrate settings from web.config file to appsettings.json.
info: Translator[0]
Adding reference to packages Microsoft.EntityFrameworkCore
info: Translator[0]
Migrate csproj file to core.
info: Translator[0]
Generating Post-Build Report
対象となったプロジェクトフォルダの1階層上のフォルダに UUID 形式のフォルダが作成されています。これがアウトプットのフォルダです。
中を見ると変換が行われていることが確認できます。
Pages 配下に Razor ページ・コンポーネントが作成されていることがわかります。
なお引数のオプションは下記です。
.\CTA.Rules.PortCore.exe --help
CTA.Rules.PortCore 2.12.19-alpha+9ed65afbf6
Amazon Web Services
ERROR(S):
Option 'd, use-builtin-rules' has no value.
-p, --project-path Project file path.
-s, --solution-path Solution file path.
-r, --rules-dir Directory containing rules json input file(s)
-d, --use-builtin-rules Use default rule files
-a, --assemblies-dir Action Assemblies Dir
-v, --version Version of net core to port to (netcoreapp3.1, net5.0, net6.0, net7.0, net8.0)
-m, --mock-run Mock run to generate output only (no changes will be made)
-c, --create-new Create a new folder for ported solution
--help Display this help screen.
--version Display version information.
変換後のルール
コマンドオプションにあるように変換にはルールが利用されます。
ルールはGitHub のドキュメントにもあるように Porting Assistant for .NET Datastore: のjson に基づいているようです。
タグの変換は tagconfigs フォルダにダウンロードされます。これを変更することでタグの変換ルールのカスタマイズができます。
なお、次回はタグのカスタマイズを実施して、ルールのカスタマイズに挑戦してみたいと思います。
asp.textbox.yaml の中身は以下です。
!Template
TagName: asp:TextBox
CodeBehindType: System.Web.UI.WebControls.TextBox
CodeBehindHandler: Default
Conditions:
- !HasAttributeWithValue
AttributeName: TextMode
AttributeValue: MultiLine
ForTemplates: [TextArea]
- !HasAttributeWithValue
AttributeName: TextMode
AttributeValue: Password
ForTemplates: [Password]
Templates:
TextArea: |
<textarea
id=#ID#
class=#CssClass#
maxlength=#MaxLength#
rows=#Rows#
cols=#Columns#
@onchange=#OnTextChanged:TextChanged:EventHandler#
readonly=#ReadOnly:HtmlBoolean#
disabled=#Enabled:InvertedHtmlBoolean#>
#Text#
</textarea>
Password: |
<input
id=#ID#
class=#CssClass#
value=#Text#
maxlength=#MaxLength#
type="password"
@onchange=#OnTextChanged:TextChanged:EventHandler#
readonly=#ReadOnly:HtmlBoolean#
disabled=#Enabled:InvertedHtmlBoolean#>
Default: |
<input
id=#ID#
class=#CssClass#
value=#Text#
maxlength=#MaxLength#
type="text"
@onchange=#OnTextChanged:TextChanged:EventHandler#
readonly=#ReadOnly:HtmlBoolean#
disabled=#Enabled:InvertedHtmlBoolean#>
参考情報
OSSとして公開されている Porting Assistant for .NET のGitHub リポジトリにリンク等がのっています。