より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

.NET Frameworkから.NET Coreへの移行を思索する

以下のスライドを見ていて、Preview版でもう試せそうだな、やってみるかと模索した話です。

www.slideshare.net

実際に移行はまだ済んでません。ゴメンナサイ。

まず、MSDNを読め

我流で、いきなりcsprojを.NET Core風に編集しようとしたのですが、おかしくなってしまうだけでした。

既にMSDNに日本語でドキュメントが用意されています。

docs.microsoft.com

こちらを読むべきでしょう。

.NET Portablility Analyzer

方法としては、.NET Frameworkを4.7.2にしてビルドして、.NET Portability AnalyzerというツールでdllもしくはexeでAPIの互換性を調査することになります。

このツールはVisual Studio拡張機能で追加するとVisual Studioから呼び出せます。

f:id:rimever:20190409195413p:plain

一度に複数のexe,dllを調査することも可能です。

ExcelでどれだけのAPIが網羅されているか出力されます。

f:id:rimever:20190409195618p:plain
職場ではなく、自宅で取ったスクショです。

Detailタブで、.NET Coreのフィルターを「Not Supported」だけを抽出してみました。

f:id:rimever:20190409195726p:plain

このExcelを元に、どれくらい工数がかかりそうか検討して、プロジェクトを進めていくことになるでしょう。

職場のアプリケーションを調査したところ、こんな感じでした。

FileInfo.SetAccessControl

恐らく、Linuxなど別OSとの兼ね合いで廃止になったのでしょう。これは対策がありそうです。

stackoverflow.com

サードパーティのライブラリ

PostgreSQLに接続するnpgsqlなどが該当するのですが、GitHubでまだメンテナンスされているライブラリだったので最新版に更新すれば問題なさそうでした。

VisualBasic.IO

csvをパースする時などに使うライブラリです。

下記の記事のよると、移植される予定とのことですが、AnalyzerをかけたところではNot Supportedと判定されていました。

www.infoq.com

.NET Remoting

これが一番鬼門になりそうです。こんな古いもの使うなよ、ASP.NETだろ、なのですが、職場のアプリケーションではプロセス間通信としての用途で使っていました。

何かしら別の対応方法を検討する必要がありました。

.NETの派生を理解するの.NET Coreの項目にて

Microsoftが今後サポートしたくないと考えているように思われるAPI(たとえば、.NETリモーティング)は避けている。

とあります。

これが直撃して影響しそうなアプリケーションを知っているのですが、大人しく新しいアプリケーションを作り直すことになるでしょう。

なんとかなりそうと思った反面、こうして作り直しが避けざるを得ないアプリケーションもあるというのは収穫です。

その他

Mutex関連で、.NET Coreでは一部引数が変更になったライブラリもあるようです。

これに向けて.NET Standardを定義してインターフェースを揃えてきたということでしょう。なかなか計画的です。

こうした地味なソースコード移行作業が必要になるケースもありそうですし、MSDNに記載されているようにテストコードが地味に利いてくるでしょう。

実際の移行方法について

docs.microsoft.com

これを読まずに、既存の.NET Frameworkのcsprojを.NET Core形式に強引に修正ということをしようとしましたが、これはダメです。

一度、.NET Core形式のcsprojを新しく作成した真っ新な状態から追加していく方がいいです。強引に手で修正だと訳わかんなくなってしまいますので。

デスクトップアプリケーションはこれからどうなる

.NET Core3.0でWin FormsとWPFWindowsのみ対応するという「延命」とも言われる対応をすることになったデスクトップアプリケーションです。

Microsoftとしてはクラウド市場に力を入れていると言われ、Linuxなどの他のOSでも動作することを念頭に開発しています。

.NET Frameworkから.NET Coreへの移行が、ある程度、広まった後に、Microsoftがデスクトップアプリケーションをどうするのかというのは気になるところです。

WinFormsもWPFもどちらも課題があります。といってもそれに変わる斬新なアーキテクチャを生み出すとは考えにくいです。

MicrosoftWindowsでの売り上げは減ってきたとはいえ、手放すほどの領域ではないですし、デスクトップアプリケーションを完全放棄はしないでしょう(と思いたい)。

Electron使ってくれとなるんでしょうか。xamlよりhtmlで画面が書けるというのは良いと思います。ElectronでGitHubが開発したもので、GitHubMicrosoftが買収してますが。

Blazorの仕組みでデスクトップアプリケーションも作れるとか壮大なプランが実はあったみたいだったりすると面白いなーと期待したりします。