.NET Frameworkで作成していたプログラムを.NET5への移植作業方法を手探りしながら調べているのですが、そのメモ状態の情報です。(随時、修正中です。)
そもそも、.NET5は従来の.NET Coreの流れを組んでいるため、.NET Frameworkで作成したプロジェクトのプロパティで、対象のフレームワークに .NET5 を選ぶ事ができません。
.NET Frameworkから.NET5に移行するにあたって、プロジェクトファイル(*.csproj)が大きく変更されています。このプロジェクトファイルを何とかすれば、移植が可能なようです。
そこで、移植評価のサンプルとして、私がよく使う構成の.NET Frameworkのプロジェクトを用意しました。
フォームには
- ToolStripMenuItem
- StatusStrip
- SplitContainer
- PictureBox
- Label
- TextBox
- Button
を配置し、TextBoxのTextプロパティは前回の状態を保持できるように、PropertyBindingを設定しました。
移植作業は
- .NET 5.0 との互換性を調べる
- プロジェクトファイルの差し替え
- アプリケーションの設定
- 参照の追加
- App.configファイルの修正
の手順で行います。
.NET Frameworkから .NET 5.0 へ変換するための互換性を調べる
.NET Frameworkから .NET 5.0 への互換性を調べるには、 .NET Portability Analyzer というツールを使います。
このツールを使うには、Visual Studio のメニューの 拡張機能 → 拡張機能の管理 をクリックします。
表示されたウィンドウの オンライン を選択し、右上の検索ボックスに .NET Portability と入力すると
.NET Portability Analyzer がみつかるので、これをダウンロードしインストール(Modifyボタンをクリック)します。
インストールが完了すると、Visual Studioのメニューの 分析 に追加されますが、まずは、ツールの設定を行うため、 Portability Analyzer Setting をクリックします。
今回は、 .NET 5.0への互換性を調べるため、 .NET の 5.0 にチェックを入れます。
また、Output formatsは、好みもあると思いますが、 HTML が見やすいので、これにチェックを入れます。
上図のようにチェックを入れたら、OKボタンをクリックし、メニューの Analyze Assembly Portability をクリックします。
すると、プロジェクトが出力する実行ファイル(*.exe)〔ライブラリの時はdllファイル〕を聞かれるので、exeファイル もしくは dllファイルを選択し、開く をクリックします。
すると、作成された互換性解析結果のファイルが表示されるので、 Open Report をクリックします。
解析結果は以下のように表示されます。
これを見ると、 .NET 5.0 への互換性は100%
100%でない場合は、まだ見た事がないのですが、互換性が無いと、 Recommend changes に何か表示されるのかな??
これで、 .NET 5.0 への互換性は100%あると確認できたので、移植作業を行います。
※移植作業のため、.NET Frameworkのプロジェクト一式すべて、.NET 5.0用にファイルをコピーします。
(旧.NET Frameworkのプロジェクトも構成を調べるのに使うので、とっておいてください)
プロジェクトファイル(*.csproj)の差し替え
コピーしたプロジェクトを Visual Studio で開き、プロジェクトファイル(*.csproj)を編集するのですが、そのままでは編集できないので、ソリューションエクスプローラのプロジェクト名を右クリックし、プロジェクトのアンロードを行います。
プロジェクトのアンロードを行うと、プロジェクトファイルの中身が表示されます。
.NET Frameworkのプロジェクトファイルの中身は、上図のように、いろいろと記載されているのですが、.NET 5.0 では、とりあえず以下の内容に差し替えます。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>
ただし、プロジェクトの出力ファイルが実行ファイル(*.exe)ではなく、ライブラリ(*.dll)の場合は
<OutputType>WinExe</OutputType>
の行は削除します。
差し替え後のプロジェクトファイルは下図のように、不安になるぐらいスッキリとしていますが、不足している物もあるので、次項で修正していきます。
プロジェクトファイルの中身を差し替えたら、アンロードしたプロジェクト名を右クリックし、プロジェクトの再読み込みを行います。
アプリケーションの設定
プロジェクト名を右クリックし、プロパティで表示されるアプリケーションの設定は、プロジェクトファイルを差し替えた事で、.NET Frameworkで行っていた設定が消えている可能性があるため、必要に応じて設定してください。
出力されたファイル(*.exe、*.dll)のプロパティで表示される会社名やバージョンなどは、.NET Frameworkの時は、アプリケーションの設定のページに アセンブリ情報 というボタンがありましたが、 .NET 5.0 では、パッケージという項目へ移動したので、この内容も間違いないか?確認してください。
参照の追加
.NET Frameworkのプロジェクトの 参照 に追加していたプロジェクトやライブライへの参照を追加します。
.NET 5.0 でのプロジェクトでは、 参照 から 依存関係 に表示が変更されていますが、この 依存関係 を右クリックし、プロジェクト参照の追加 をクリックします。
ここで、従来の参照と同じ様に、プロジェクトやライブラリの参照を追加します。
依存関係の参照にライブラリやプロジェクトを追加すると以下のように、.NET Frameworkの時の参照からは少し変更された表示になっています。
App.configファイルの修正
プロジェクトに App.config ファイルがある場合は、このファイルを修正します。
ソリューションエクスプローラの App.config ファイルを選択し、<supportedRuntime>の部分(下図の青く選択された部分)を削除します。
動作確認
ここまで修正を行い、ソリューションのビルドを行うと、フォームのアイコンが変更され、.NET 5.0 に移植出来た事が確認できます。
その他
.NET Frameworkから.NET5へ移植すると、SplitContainerの表示が少し崩れていました。
また、.NET Frameworkでは、SplitContainerのSplitterの位置は、フォームエディタの表示で、マウスのドラッグで移動する事ができましたが、.NET5では、それが出来なくなっていたので、SplitterDistanceプロパティで調整してみたりと、他にも少しずつ、.NET Frameworkとは異なる点があるとは思います。
他にも、.NET Frameworkのソリューションで、
・Windows Formsのプロジェクト
・クラスライブラリのプロジェクト
・ユーザーコントロールのプロジェクト
を作り、Windows Formsのプロジェクトから、クラスライブラリ、ユーザーコントロールのプロジェクトを参照し、Windows Formsのプロジェクトだけを.NET 5.0に変更し、他は.NET Frameworkのままにしてみたのですが、動作はするようでした。
つまりは、.NET 5.0 のプロジェクトから、.NET Frameworkのライブラリを使う事が出来たのですが、.NET と .NET Framework が混在出来るのは、今だけ?かもしれないので、どうせ.NET へ移植するのなら、すべてを移植するようにした方が良いでしょうね?
参考ページ
コメント