1
1

今回は、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 を行います。

image.png

src フォルダの CTA.Rules.sln ソリューションを Visual Studio で開きます。

image.png

メニューからソリューションのビルドを実行します。

image.png

コンパイルが完了しました。今回はデバッグビルドで進めました。

作成された実行モジュールと実行

コマンドで実行するモジュールは CTA.Rules.PortCore に作られます。

フォルダを確認すると以下のように CTA.Rules.PortCore.exe が作成されています。

image.png

コマンドラインで実行を行ってみます。今回は 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 形式のフォルダが作成されています。これがアウトプットのフォルダです。

image.png

中を見ると変換が行われていることが確認できます。

image.png

Pages 配下に Razor ページ・コンポーネントが作成されていることがわかります。

image.png

なお引数のオプションは下記です。

 .\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 フォルダにダウンロードされます。これを変更することでタグの変換ルールのカスタマイズができます。

なお、次回はタグのカスタマイズを実施して、ルールのカスタマイズに挑戦してみたいと思います。

image.png

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 リポジトリにリンク等がのっています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1