clock-up-blog

go-mi-tech

.NET Framework 上に構築した ASP​.NET Core プロジェクトのプラットフォームを後から .NET Core に変更する

ひとつ前の記事で、ASP.NET Core プロジェクトは .NET Framework, .NET Core 両方の上に構築できる、と書いたが、実はある時点から ASP.NET Core のサポートプラットフォームは .NET Core のみに絞られる、らしい。

参考記事

ASP.NET Coreが.NET Frameworkサポートを終了

作者: Jonathan Allen Jeff Martin , 翻訳者 h_yoshida 投稿日 2017年6月21日
原文(投稿日:2017/05/09)へのリンク
先週の金曜日、ASP.NET Coreはひっそりと、.NET Standard 1.*と.NET 4.*から.NET Core 2.0のみに、そのサポート対象を変更した。

既存プロジェクトの移行の仕方を紹介する

上記記事では破壊的変更に対する非難が書かれているが、実際問題として、自分の場合はそれほど .NET Framwork に依存するようなコードを書いていなかったので移行はそれほど難しくなかった。

今回はその方法を紹介する。

準備

前提として、ASP.NET Core のプラットフォームを「.NET Framework 4.*」から「.NET Core 2.0」に変更することを考える。

「.NET Core 1.1」以前への変更は今回考えない。(引用記事に書かれている限定対象のプラットフォームが「.NET Core 2.0」となっており、まずはその条件の移行をシンプルに行うのが良い。いきなりそれ以外の複雑な条件の移行をしようとしたら痛い目を見ると思う。)

.NET Core 2.0 SDK

さて .NET Core 2.0 を使うためには .NET Core 2.0 SDK が必要なので、まずこれを導入する。
Download .NET Core

Visual Studio 2017 Version 15.3.0

また、.NET Core 2.0 SDK を利用するためには Visual Studio 2017 Version 15.3.0 以降が必要なので、これを導入する。
Downloads | IDE, Code, & Team Foundation Server | Visual Studio

既に Visual Studio 2017 が入っている場合も最新のインストーラを入手し、実行しなおすと良い。適切にアップデートが行えるはず。

プロジェクトが依存するプラットフォームの設定

プロパティからの変更は無理

プロジェクトのプロパティの Application タブで Target Framework を選ぶドロップダウンがあるが、残念ながらこのドロップダウンから .NET Framework を .NET Core に変更することはできない。

f:id:kobake:20170816153519p:plain

csproj を直接編集する

少し強引な手段になるが、プロジェクトファイルである .csproj ファイルを直接編集することにする。

自分の好きなエディタで編集しても良いし、Visual Studio 上では Solution Explorer 上のプロジェクトの右クリックメニューから [Edit ~~~.csproj] を選択して編集をすることもできる。

以下のように TargetFramework 周辺を書き換える。

  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
    <RuntimeIdentifier>win7-x86</RuntimeIdentifier>
  </PropertyGroup>

  ↓

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

パッケージ依存の更新

プラットフォーム情報を変更しただけだと、各種 NuGet パッケージのバージョン等の依存に不整合が起こる。

これらを一挙に解消するため、プロジェクトが依存する NuGet 全パッケージの更新(インストールし直し)を行う。

PM> Update-Package -Reinstall

これでだいたいの問題は解決する。

最後に

リビルドを行ってみる。問題が出た場合は個別対処。

問題が解消したら実行を行ってみる。これで動けば成功。


自分の場合はそれほどハマらなかったけど、.NET Framework にゴリゴリ依存しているようなプロジェクトでは移行は大変かもしれませんね…。そういうところは単純に書き直すしか無いと思います。(外部モジュールとして(外部ドメインとして)切り出すという選択もアリです)

個人的所感

ASP.NET Core、まだまだ安定期とは言えませんが ASP.NET MVC 5 系で足踏みをしているよりは ASP.NET Core の動きに転びながらも日々追従していくのが将来のリスクを減らす意味では良いと思ってます。

いつ来るか分からない安定期まで待ちに待ってさて移行しようとしても膨大な学習コストに足をすくわれる可能性が高いです。日々の差分を少しずつ吸収していくことが良いリスクヘッジになるでしょう。

});