.NetFrameworkから.Net Coreの移行で出来ない事[WindowsForm編]
.NetFrameworkから.NetCoreで作り直す時に直面した事
フレームワークのバージョンを変更するだけで移行が可能か?
.Framerowkのバージョンが上がるだけだった場合の移行では、使用する.Frameworkのバージョンを変更するだけでも、ある程度新しい.NetFrameworkに変換がされたが、.NetFrameworkから、.Net Coreへは、根本的にアーキテクチャが異なるようで、使用するフレームワークを変更するという単純な方法では出来ないようであった。
変換する方法自体はいくつかあるば、「.NET Portability Analyzer」を利用し、行こう可能なアセンブルを分析したり等で、調整していく方法である。
筆者の経験上、こういった変換は、動作確認に多くの時間を割く上に、その後リリース後の、動作不良を起こした際に、影響範囲の特定にまた時間を掛け、みたいな、急を要するトラブルの責任リスクや、評価に繋がってしまうのを経験している為、基本的には、アーキテクチャが変わった場合には、ゼロから作り直す方法を取っている。
ゼロからといっても、.NetFrameworkの作り方に依存しすぎる作りをしていない限りは、コードのコピー&ペーストが利用できるところも多い為、全くのゼロではない。
.NetFrameworkから、.NET Coreへの画面デザインコピーでつまづいた
移行で実際大変なのは、画面デザイン。
ボタンの大きさ、画面の大きさ、位置に、フォントサイズや、フォントの種類・・・と言った事を、いちいちゼロからやるのは、とても大変である。
ところが、試しに、.NetFramework4.7.2から、Core 5で作成したWindowsFormsの画面に、コピー&ペーストで貼り付けようとすると、なんと、貼り付けられなかった。
今後、貼り付け時に変換して貼り付けられる等、改善される可能性もあるが、.Net Coreの登場から5までバージョンが上がっているが、そういった様子もこれまでなかったようなので、画面デザインに関しては、位置やサイズ、カラー等の部分的なところをコピーして、デザイン移行していく事になりそうだ。
画面のボタン配置などを、レガシーのように、コードで生成してやっている場合には問題無いと思われるが、Visual(ビジュアル)な利便性が損なわれ過ぎて、そんな作り方をしている人は殆どいないと思われるが・・・
WPF程じゃ無いが、微妙にコードの補修が必要な場面も出てきた
WPFをコードビハインドで動作させる為に、Doeventsが無い!みたいな事ほど迄の修正は無いが、Encoding(エンコーディング)でSHIFT-JISを扱う時など、事前宣言が必要等微妙な修正が必要となった。
.Net CORE5で Encoding.GetEncoding("shift-jis") を使用する為には、 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); を事前にする必要がある。
using (StreamWriter sw = new StreamWriter(OutPutPath + "\\" + string.Format("{0:yyyyMMddHHmmss}", DateTime.Now) + "_YamatoFullFillment.csv" , false, Encoding.GetEncoding("shift-jis")))
{
}
のように。
結局のところ、コードコピーによる不具合も不安になる為、がっちりコーディングしなおしが基本となりそうだ。