ActiveReportsで開発したアプリを「 .NET アップグレード アシスタント」で「 .NET 6」へ移行する

.NET帳票コンポーネント「ActiveReports for .NET(アクティブレポート)」では、バージョン「16.0J」よりWinodws FormsやWPFといったデスクトップアプリを .NET Core/ .NETの環境で使用できるようになりました。

今回の記事では、ActiveReportsを使用した .NET FrameworkのWindows Formsアプリを「 .NET 6」に移行する方法をご紹介します。

検証環境

今回使用する検証環境は以下の通りです。

  • OS:Windows 11(22H2)
  • IDE:Visual Studio 2022(Version 17.4.4)

ActiveReportsは「16.0J SP1(v16.1.0.0)」を使用します。こちらもあらかじめ製品版、またはトライアル版をインストールしてください。トライアル版は無料で以下より入手可能です。

移行対象のアプリ

先日公開した記事で、2009年に発売された「6.0J」に含まれている請求書サンプル(…\Samples\CS\Layout\Seikyu1)を「16.0J」に移行してみました。

今回は上記の記事で移行したアプリを「 .NET Framework 4.8.1」から「 .NET 6」に移行してみたいと思います。移行対象のアプリはGitHubからダウンロード可能です。

移行元のアプリケーション

.NET 6への移行方法

.NET Frameworkから .NET 6へ移行するには以下のような方法があります。

プロジェクトファイルを手動で移行する

.NET Frameworkから .NET 6に移行するには、 既存のプロジェクトファイルを .NET 6に対応したSDKスタイルのプロジェクトファイルに手動で移行する方法があります。詳しくは以下のページをご覧ください。

また、製品ヘルプではActiveReportsを使用した .NET FrameworkのWindows Formsアプリを .NETに手動で移行する手順を解説しています。

.NET アップグレード アシスタントを使って移行する

「 .NET アップグレード アシスタント」は、 .NET Frameworkで作成されたWindows Formsアプリを .NET 6にアップグレードするためのコマンドラインツールです。

今回はこの .NET アップグレード アシスタントを使ってActiveReportsを使用した .NET FrameworkのWindows Formsアプリを .NET 6に移行してみたいと思います。

.NET アップグレード アシスタントのインストール

.NET アップグレード アシスタントの実行には以下の条件がありますので予め環境を用意しておいてください。

  • Windows オペレーティング システム
  • .NET 6 以上のSDK
  • Visual Studio 2022 17.0 以降

コマンドプロンプトを展開し、次のコマンドを実行してインストールを行います(インストール済みの場合この手順は不要です)。

dotnet tool install -g upgrade-assistant

また、 .NET アップグレード アシスタントは現在プレリリースとして公開されており、頻繁に更新が行われています。次のコマンドを実行してツールの更新を行うことができます。今回はバージョン「0.4.355802」を使用しました。

dotnet tool update -g upgrade-assistant

移行対象のアプリを分析する

ツールのインストールと更新が完了したら以下のコマンドを実行し、移行する前にどのような変更が必要になるか分析情報を確認します。

upgrade-assistant analyze Seikyu1_2010.sln

警告が2つ出力されていますが、デフォルトフォントと高DPIに関するものなので、このまま移行を進めたいと思います。

分析結果

.NET アップグレード アシスタントの実行

分析情報を確認したら、次に本題の移行を実施していきます。以下のコマンドで移行対象のソリューションファイルを指定し、移行を実施します。
※ 移行作業前にプロジェクト全体のバックアップを取ることをおすすめします

upgrade-assistant upgrade Seikyu1_2010.sln

実行すると移行完了までのステップが表示され、次に実施する手順の選択を求められます。主に以下のような作業を行います。

  • SDK形式プロジェクトへの変換
  • NuGet参照のクリーンアップと更新
  • ターゲットフレームワークの更新
  • その他
移行完了までのステップ

頭に「Next step」と付いているところが次に実施するステップで、以下の中から実施するコマンドを選択していきます。

  1. Apply next step(コマンドを実行し、次のステップを表示する)
  2. Skip next step(コマンドを実行せず、次のステップを表示する)
  3. See more step details(ステップの詳細を確認する)
  4. Configure logging(ログ設定を変更する)
  5. Exit(移行を停止して終了する)

基本的には「1」の「Apply next step」を次々実行していくと移行が完了します。「1」を入力してEnterキーを押下するか、何も入力しないでEnterキーを押下すると「1」を選択した場合と同じ動作になるので、Enterキーをどんどん押下していきます。

1つのステップが完了すると、「Complete」の文字列が表示され、次のステップに「Next step」が表示されます。

次のステップ

同様に次のステップをEnterキーを押下して進めていきます。途中以下のように大量の不要なパッケージの削除を行うステップが出てきますが、根気よく進めていきましょう。

不要なパッケージ削除

最後の「11.Move to next project」まで来たら、「5」を入力してEnterを押下し、移行作業を完了します。

次のプロジェクト

以上で .NET アップグレード アシスタントでの作業は完了です。

移行完了

移行が完了したプロジェクトファイル(Seikyu1_2010.csproj)を開くと、以下のように .NETに対応したSDK形式のプロジェクトに変換されており、またターゲットフレームワークが最新の .NET 7に移行されていることがわかります。

移行後のプロジェクトファイル

手動でプロジェクトを調整

以上でほとんどの移行作業は完了ですが、少しだけ手動で修正が必要なところが残っているので対応していきます。
※ この作業の内容は移行するアプリケーションの内容によって異なります。

licenses.licxファイルの削除

移行したActiveReportsのプロジェクトには .NET Frameworkでのライセンス処理に必要な「licenses.licx」が含まれています。

licenses.licxファイルの削除

これがプロジェクトに残ったままビルドすると、「“lc.exe” はコード -1 を伴って終了しました。」のエラーになってしまいます。

ビルドエラー

.NETでは、「lc.exe(ライセンスコンパイラ)」がないので、セットで使う「licenses.licx」は不要です。「licenses.licx」は削除してビルドしてください。

アセンブリバージョンの指定

移行元のプロジェクトでは「AssemblyInfo.cs」で以下のようにアセンブリバージョンをワイルドカード指定していました。このように設定することにより、バージョン番号中のビルドおよびリビジョン番号の部分を自動採番できます。

[assembly: AssemblyVersion("1.0.*")]

この自動採番されるビルド番号やリビジョン番号は、ビルドする日付等によって異なる番号が生成されます。

しかしながら、 .NET Core/ .NETのプロジェクトでは決定論的ビルド(同一のソースコードからは必ず同一のバイナリが生成される)がデフォルトで有効となるように仕様が変更されています。

The “determinism” flag is set by default in .NET Core projects. Determinism means that identical inputs will produce bit-for-bit identical outputs, to allow for reproducible builds. The ‘*’ syntax provides variable input, so it is incompatible with determinism. You can either remove ‘*’ from your version string, or disable determinism in your project file by setting the MSBuild property `<Deterministic>false</Deterministic>`.

引用元:The specified version string contains wildcards [Solution] – Visual Studio Feedback

ワイルドカードを指定した場合、同一のソースコードであってもビルドする日付によってビルド番号やリビジョン番号が異なってしまうことになりますので、決定論的ビルドが有効になっている状態ではワイルドカードの指定はできません。

ワイルドカードではなく特定のバージョンを指定するように変更するか、または以下のようにプロジェクトファイルに「Deterministic」のオプションを追加し、「false」を設定することで決定論的ビルドを無効化してワイルドカードを使用可能にしてください。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
・・・(中略)・・・
	  <Deterministic>false</Deterministic>
  </PropertyGroup>
・・・(中略)・・・

不要なアセンブリ参照の削除

今回移行したプロジェクトでは、一部 .NET アップグレード アシスタントで整理しきれなかった不要なアセンブリ参照が残っており、警告が表示されています。これらは移行後は使用しないので参照を削除してください。

不要なアセンブリ参照の削除

ターゲットフレームワークの変更

.NET アップグレード アシスタントで移行を行った場合、移行先のターゲットフレームワークは最新の .NETになります。この記事執筆時点では最新は「 .NET 7」ですが、ActiveReportsが現在サポートしているのは「 .NET 6」までなので、ターゲットフレームワークを手動で変更します。
※ .NET 7のままでもアプリケーションは動作いたしますが、 .NET 7の環境固有で発生した問題はサポート対象外となり、問題の調査や回避策のご提示ができない場合があります。

プロジェクトを選択し右クリック⇒「プロパティ」からプロパティ設定画面を開き、ターゲットフレームワークを「 .NET 6.0」に変更します。

ターゲットフレームワークの変更

アプリケーションの実行

各種調整が完了したらプロジェクト全体をリビルドしてアプリケーションを実行します。以下のように .NET 6でActiveReportsを使用したWindows Formsアプリを実行することができました。

.NET 6に移行したアプリケーションを実行

さいごに

以上がActiveReportsを使用した .NET FrameworkのWindows Formsアプリを「 .NET アップグレード アシスタント」で「 .NET 6」に移行する方法でした。

製品サイトにはこの他にも製品の機能を手軽に体験できるデモアプリケーションやトライアル版も公開しておりますので、こちらもご確認ください。

また、ご導入前の製品に関するご相談、ご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /