.NETのバージョンまとめメモ
Created at:
.NET Coreとそれにまつわるバージョンはいろいろあって、多分数字が大きい方が正しいのであろうと思いつつも1.1と1.0が並行していた時期があったりとどっちを使えば…と若干混乱したことがあったので整理してみようかと。.NET Standardというものもあって頭が爆発しそうですし。
なお.NET Standardに関して詳しくは.NET Standardのページと、藤原さんの.NET Standard のおさらいがおすすめです。
バージョン一覧
2017年6月9日現在の最新の.NET Core/.NET/ASP.NET Core/ASP.NET MVC Coreのバージョンとそれに対応する.NET Standardバージョンの一覧です。
Product | Release | Name | Latest | .NET Standard |
---|---|---|---|---|
.NET Core (netcoreapp) | LTS | .NET Core 1.0 | 1.0.5 (SDK 1.0.4) | 1.6 |
Current | .NET Core 1.1 | 1.1.2 | ||
Preview | .NET Core 2.0 | 2.0-preview (VS2017.3) | 2.0 | |
ASP.NET Core | LTS | ASP.NET Core 1.0 | 1.0.4 | n/a |
Current | ASP.NET Core 1.1 (.NET Core 1.1, .NET 4.6) | 1.1.2 | ||
Preview | ASP.NET Core 2.0 (.NET Core 2.0, .NET Standard 2.0予定) | 2.0-preview | ||
ASP.NET MVC Core | LTS | ASP.NET Core 1.0 | 1.0.3 | n/a |
Current | ASP.NET MVC Core 1.1 | 1.1.3 | ||
Preview | ASP.NET MVC Core 2.0 | 2.0.0-preview | ||
.NET Framework | - | .NET Framework 4.5 | 4.5.2 | 1.2 |
- | .NET Framework 4.6 | 4.6.2 | 1.5(w/Tooling 1.0 or 2.0), 1.6(w/Tooling 2.0), 2.0 | |
Current | .NET Framework 4.7 | 4.7 | 1.5, 1.6, 2.0 |
ASP.NET Core/ASP.NET MVC Coreはランタイムではないので.NET Standardには関係ありません。
インストールするときに微妙に混乱することのあった点として.NET Core SDKバージョンやToolingといったものがあるということでしょうか。特にSDKバージョンは.NET Coreのバージョンと一致していないのでわかりにくいです。
.NETとASP.NET Coreのバージョン選択
.NET Coreは最新版を素直に使えば良いので1.1シリーズでよいでしょう。
.NET Frameworkは4.7が最新なのですがSystem.ValueTupleがコアライブラリ入りしたおかげで、.NET Standardなライブラリ側でSystem.ValueTupleパッケージのNuGet参照があると参照が混乱して無事死亡というひどい問題があるので4.7を選ぶときには気を付けましょう。
ASP.NET Core/ASP.NET MVC Coreは最新で良さそうです。
- .NET Coreは.NET Core 1.1(.2) + ASP.NET Core 1.1(.2) + ASP.NET MVC Core 1.1(.3)
- .NET Frameworkは.NET 4.6.2 + ASP.NET Core 1.1(.2) + ASP.NET MVC Core 1.1(.3)
- .NET Framework 4.7はSystem.ValueTupleの参照の扱いが要注意
.NET Standardの選択
.NET Coreをターゲットにする分に関してはまあ1.0-1.6どれでもという感じです。
.NET Frameworkがややこしく.NET Framework 4.6で.NET Standardは1.6にするにはTooling 2.0である必要がある、ということです。そもそもTooling 1.0/2.0とはという話になって訳が分からないので1.5以下を選ぶのが無難そうです。
なお.NET Standard 1.5は.NET Framework 4.6.2以降なので気を付けないと.NET Framework 4.6がターゲットにならないものになります。1.4でも4.6.1ですけど…。ややこしい。
そういった点を鑑みると以下のような感じで選ぶのがよさそうかなと思いました。
- .NET Coreのみをターゲットにするなら.NET Standard 1.6
- .NET Framework 4.6/.NET Core/Xamarin/UWPをカバーするなら.NET Standard 1.3
- .NET Framework 4.6.1以降なら1.4
- .NET Framework 4.6.2以降なら1.5
- .NET Standard 2.0がでたら.NET 4.6.2/.NET Core 2.0(他はそのまま)に引き上げつつ.NET Standard 2.0へ移行
もちろん使いたいものによって選択するものは変わってくると思います。古いランタイムをターゲットにしている場合にはPCLやShared Projectで#ifの方が良かったりするかもしれません(Unityとか)。
まとめ
.NET Standard 2.0はよ。