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

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

PCL(ポータブルクラスライブラリ)を.NET Standardのクラスライブラリに移行

XamarinでPCLを用いていたのですが、

f:id:rimever:20190428192339p:plain
レガシーポータブルだと!?

のようにレガシーポータブルと表示され、レガシー扱いとなっていました。

PCLで良くね?と感じていましたが、Visual Studio 2019では選択肢として表示すらされなくなっていました。

化石扱いされて無念を感じたトラウマもあり、そんな思いをするのはもう御免なので、連休中に入れ替えを行うことにしました。

エンジニアが戦うのは、バグでもなく、ましてや社内政治でもなく、時代の流れです。

f:id:rimever:20190428202555p:plain

左がPCLのプロジェクトファイル。右が.NET Standardのプロジェクトファイル。

.NET Standardの方がスッキリしていますね。

プロジェクトのプロパティでポロっと変えられたりしないのーと期待しているのですが、移行方法としては、やはり新規作成するのが良さそうです。

  1. 移行したいPCLプロジェクトを削除
  2. PCLプロジェクトのフォルダ名を変更
  3. .NET Standardクラスライブラリを作成
  4. PCLプロジェクトのファイルを移行
  5. Properties/AssemblyInfo.csファイルは削除
  6. NuGetライブラリの取得
  7. プロジェクトの参照追加

といった流れで作業を行いました。やや煩雑です。

UnityContainerが4.0.1だったのですが、.NET Standard2.0が対応しているのはこのバージョンでは対応していないのでバージョンアップしたりとNuGetライブラリのメンテナンスも行うことになりました。

それから一通りの動作確認をしたりしたので、かなり大変でした。

こういうとき、テストコードが大事ですね。

期待される効果

PCLだと出来ることの制約があります。よって標準ライブラリなのにPCLでは使えないクラスがあります。

そこから解放されることかなと。(私の場合、IConvertibleやSystem.File.IO[FileInfo,DirectoryInfo]が使えませんでした。プロファイルによって異なる?)

下記ページで詳しく説明されています。

ytabuchi.hatenablog.com

.NET Standardについては、下記の記事でようやく私の中で、頭の中でのイメージが完成した感じです。

blog.ecbeing.tech