しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET Core 2.0 から 2.1 へのアップデートを行ったメモ

.NET Core 2.1 と ASP.NET Core 2.1 がリリースされたので、これまで 2.0 や 2.1 rc1 で開発していたアプリケーションを 2.1 にアップデートしてました。2.1 rc1 は特にやることないのですが、2.0 からはちょっと作業が必要だったのでメモ。

といっても、基本は以下のドキュメントに従えば良いです。実際この通りに作業しました。

元々は ASP.NET Core 1.0 から開発していたアプリを題材にしたので、思ったより変更点が多かったため以下のようになりました。

基本的にはコードや設定の量が減っていくので非常に好感が持てます。

.NET Core 2.1 に変更

当然ながらターゲットフレームワークを .NET Core 2.1 に変更する必要があります。

f:id:shiba-yan:20180603010336p:plain

Visual Studio から変更しても良いですし、csproj を直接開いて netcoreapp2.1 へ書き換えても良いです。

f:id:shiba-yan:20180603010501p:plain

今後の作業は基本的に csproj を直接編集することになるので、手動で変えておいた方がエディタ開きっぱなしにできて良いかもしれません。

Microsoft.AspNetCore.App メタパッケージを使う

ASP.NET Core 2.0 から Microsoft.AspNetCore.All という狂気に満ちたメタパッケージが用意されましたが、2.1 からはマイルドになった Microsoft.AspNetCore.App というメタパッケージが追加されました。

アプリケーション開発に必要なパッケージが入っているので、こっちに変えておいた方が良いでしょう。

f:id:shiba-yan:20180603010907p:plain

Visual Studio からは手間がかかるので、csproj を開いて Microsoft.AspNetCore.AllMicrosoft.AspNetCore.App に変更した上でバージョンを 2.1.0 にすれば良いです。

f:id:shiba-yan:20180603010919p:plain

保存すると nuget restore が実行されて、ASP.NET Core 2.1 が落ちてきます。

DotNetCliToolReference を削除

csproj 内に Microsoft.VisualStudio.Web.CodeGeneration.Tools や EF Core 向けの DotNetCliToolReference が残ってたりする場合は削除します。

これらのツールは .NET Core Global Tool に置き換えられました。詳細はにぃにのブログなどで。

Visual Studio で開発している場合には、あまり影響のない部分だとは思ってます。そういった部分は Visual Studio が勝手にいい感じにやってくれるはず。

Program.cs を修正

エントリポイントのコードが微妙に変更されていますが、やっていることに違いはないのでドキュメントに書いてあるコードをコピペすれば良いです。

このように変更することで、2.1 で追加された Integration tests が書けるようになります。

Http に関係する Mock をいろいろと作る必要なく、MVC な部分に対するテストを簡単に書けます。

Startup.cs を修正

Startup クラスでは主に AddMvc に対して SetCompatibilityVersion の呼び出しを追加して、互換性レベルを指定するぐらいかと思います。

services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

他は 2.1 から追加された CookiePolicy 周りや、HTTPS Redirect / HSTS ぐらいです。開発環境で必要だと思ったら追加すればよいかな、という認識です。

作業のまとめ

今回は細々とメンテしている App Service Info に対して 2.1 へのアップデートを行ったので、GitHub 上でアップデート作業のコミットを見れるようにしておきました。

前述したとおり ASP.NET Core 1.0 から 1.1 / 2.0 / 2.1 とアップデートしてきたので、多少 csproj に余計な記述が残っていたのを削除したりしてます。

2.1 へのアップデートのタイミングで古い Startup やエントリポイントを大きく変更しましたが、これまで特に問題なく動作していたので、互換性に関しては相変わらず感服するばかりです。