.NET Core 2.1.0がリリースされました
2018年5月30日、「.NET Core 2.1.0」がリリースされました。LTS版.NET Core
「.NET Core 2.1」はLTSリリースになる予定です。サポート期間
LTS版「.NET Core」のサポート期間は、リリースされてから3年間もしくは、次のLTS版がリリースされてから1年間のどちらか短い期間がサポート期間になります。サポートポリシーについては、以下を参照してください。
今現在は「Current」リリース、つまり通常版としてリリースされていますが、今後2,3ヶ月以内にマイナーアップデートを行い、正式にLTS版「.NET Core」としてアナウンスされる予定です。
その後はセキュリティーや信頼性、「Ubuntu 18.10」など新しいプラットフォームのサポートなどに焦点をあてたアップデートが提供されます。
.NET Core 2.0と高い互換性
「.NET Core 2.1」は「.NET Core 2.0」と高い互換性があり、簡単に「.NET Core 2.1」へアップデートすることができます。「.NET Core 2.0」のサポート期間は2018年9月1日に終了するため、「.NET Core 2.1」への移行が推奨されます。
「.NET Core 2.1」と「.NET Core 2.0」のAPIの相違点は、以下を参照してください。
.NET Core 2.1への移行を
近い将来「.NET Core 2.1」はLTS版になる予定であるため、「.NET Core 2.1」への移行が推奨されています。現在開発中のアプリであれば、「.NET Core 2.1」より前のバージョンに留まる理由はありません。
すでに開発が完了しており運用中のアプリであれば、「.NET Core 2.1」がLTS版としてアナウンスされるまで、移行を待つと良いでしょう。
「.NET Core 2.1」では数々の改良が行われており、以下に挙げる理由が移行への後押しとなるでしょう。
- 長期サポート
- パフォーマンスと品質の大幅な改良
- Ubuntu 18.04、Alpine、ARM32といった新しいプラットフォームのサポート
- プロジェクトファイル内で.NET CoreとASP.NET Coreを簡単に管理でき、自己完結型のアプリを簡単に公開可能
なぜ.NET Core 2.0がLTS版にならなかったのか
開発チームは「.NET Core 2.0」をLTS版にして欲しいという要望を数多く受け取っており、また元々の予定では「.NET Core 2.0」をLTS版としてリリースする予定でした。しかしプラットフォーム依存部分の管理方法が「.NET Core 1.0」で大きな課題となっていました。
開発チームは「.NET Core 1.0」のリリース後から徐々にこの課題の改善を行ってきましたが、残念ながら「.NET Core 2.0」で課題の解消には至りませんでした。
そのためこの問題を解決するまでLTS版のリリースは待った方が良いとの判断が行われ、「.NET Core 2.0」が通常版としてリリースされました。
そして「.NET Core 2.1」にてこの課題が解消され、「.NET Core 2.1」がLTS版としてアナウンスされる予定です。
この課題の解消により「ASP.NET Core」パッケージの参照に「.NET Core 2.1」のバージョン番号が含まれることはもうありません。
サポートしているプラットフォーム
「.NET Core 2.1」は、以下のプラットフォームをサポートしています。OS | バージョン |
---|---|
Windows Client | 7/8.1/10(build 1607以降) |
Windows Server | 2008 R2 SP1以降 |
macOS | 10.12以降 |
RHEL | 6以降 |
Fedora | 26以降 |
Ubuntu | 14.04以降 |
Debian | 8以降 |
SLES | 12以降 |
openSUSE | 42.3以降 |
Alpine | 3.7以降 |
Ubuntuでは
「Ubuntu」では、以下のバージョンで「.NET Core 2.1」を利用可能です。- Ubuntu 18.04
- Ubuntu 17.10
- Ubuntu 16.04
- Ubuntu 14.04
「Ubuntu 18.04」では、64bit版(amd64)とARM32bit版がサポートされています。
「Ubuntu 17.10」以下では、64bit版(amd64)のみサポートされています。
ARM32bit版について
「ARMv7」や「ARMv8」チップを搭載したハードが必要です。例えば「Raspberry Pi 2+」はサポートされますが、「ARMv6」チップを搭載した「Pi Zero」等のハードはサポートされません。
詳細は
マイナーバージョン等の詳細は以下を参照してください。.NET Core 2.1の新機能
「.NET Core 2.1」の新機能の紹介です。1..NET Core Toolsの導入
新しいツールである「.NET Core Tools」が導入されました。「.NET Core Tools」は「NPM global tools」に着想を得て開発されたツールであり、「NPM global tools」とも似ています。
自分で「Global Tool」を作成することも可能です。
dotnet tool install -g dotnetsay
dotnetsay
dotnetsay
コマンドの機能を紹介します。
コマンド | 機能 |
---|---|
dotnet tool install | ツールのインストール |
dotnet tool update | ツールのアップデート |
dotnet tool uninstall | ツールのアンインストール |
dotnet tool list | インストール済みツールの一覧表示 |
コマンドのオプションを紹介します。
オプション | 機能 |
---|---|
--tool-path | ツールの配置位置の指定(AdHocインストール) |
--global -g |
グローバルモード(デフォルト) |
「Ad-hocインストール」でインストールすれば、任意の場所にインストールすることも可能です。
2.ビルド時間の改善
「.NET Core 2.0」と比較してビルド時間が大幅に改善されました。小さなプロジェクトでは3倍程度ビルド時間が短縮され、大きなプロジェクトでは10倍以上ビルド時間が短縮されています。
ビルド時間とは「dotnet build」実行時や「Visual Studio」からビルドを実行した時にかかる時間のことです。
3.ランタイムパフォーマンスの改善
ランタイムパフォーマンスも改善されています。4.ネットワークパフォーマンスの改善
ネットワークパフォーマンスを改善するため、「SocketsHttpHandler」と呼ばれる新しい「HttpClientHandler」が実装されました。「SocketsHttpHandler」は、「.NET sockets」と「Span<T>」をベースとした「HttpClient」のC#による実装です。
「SocketsHttpHandler」が「HttpClient」のデフォルトの実装になりました。
これにより既存の実装よりもパフォーマンスが向上することに加え、プラットフォーム依存部分を排除でき、異なるOS間で一貫性のある振る舞いを提供します。
5.Span<T>やMemory<T>等の導入
Span<T>やそれに関連するタイプの導入により、メモリーの使用効率が良い高パフォーマンスな処理を実現できるようになりました。例えば10,000の要素を持つ配列の最初の1,000要素を引数に渡す場合、最初の1,000要素をコピーし、コピーした要素を引数に指定する必要があります。
この操作は時間及びメモリーの観点から見ると、コストのかかる処理です。
「Span<T>」は配列の仮想的なビューを提供し、「Span<T>」を利用することで時間及びメモリーの割り当てなしに処理を行うことができます。
「Span<T>」は構造体であるため、メモリーの割り当てなしに複雑なパイプライン処理等を活用できます。
サンプル1
サンプル2
出力結果
ints length: 100
spanInts length: 100
slicedInts length: 2
slicedInts contents
42
43
slicedInts contents
21300
43
spanInts length: 100
slicedInts length: 2
slicedInts contents
42
43
slicedInts contents
21300
43
6.Brotli圧縮
「Brotli」による可逆圧縮が利用可能になりました。「Brotli」は多目的に利用可能な圧縮アルゴリズムです。
処理速度は「Deflate」と似ていますが、より高い圧縮率を提供します。
「Brotli」は多くのウェブブラウザーや主要なウェブサーバー、そしてCDNによってサポートされている圧縮アルゴリズムです。
サンプル
出力結果
Request URL: https://raw.githubusercontent.com/dotnet/core/master/README.md
Initial content length: 2244
Compressed content length: 727
Decompressed content length: 2244
Compression ratio: 67.6%
First 10 lines of decompressed content
# .NET Core Home
The dotnet/core repository is a good starting point for .NET Core.
The latest major release is [.NET Core 2.1](release-notes/2.1/2.1.0.md). The latest patch updates are listed in [.NET Core release notes](release-notes/README.md)
## Download the latest .NET Core SDK
* [.NET Core 2.1 SDK](release-notes/download-archives/2.1.0-download.md)
Initial content length: 2244
Compressed content length: 727
Decompressed content length: 2244
Compression ratio: 67.6%
First 10 lines of decompressed content
# .NET Core Home
The dotnet/core repository is a good starting point for .NET Core.
The latest major release is [.NET Core 2.1](release-notes/2.1/2.1.0.md). The latest patch updates are listed in [.NET Core release notes](release-notes/README.md)
## Download the latest .NET Core SDK
* [.NET Core 2.1 SDK](release-notes/download-archives/2.1.0-download.md)
7.Cryptography APIの改良
新しい「Cryptography API」が追加されました。- SignedCms APIの追加
- SHA-2に対応したX509Certificate.GetCertHash
- Span<T>ベースのCryptography APIの追加
- Rfc2898DeriveBytesのパフォーマンス改善
- CryptographicOperationsクラスの追加
- static RandomNumberGenerator.Fillの追加
- RFC 3161 Cryptographic Timestampのサポート
- Unix EnvelopedCmsの追加(LinuxとmacOS向け)
- ECDiffieHellmanの追加
- RSA-OAEP-SHA2及びRSA-PSSのサポート(UNIXプラットフォーム向け)
8.Windows互換パック
「.NET Framework」向けのコードを「.NET Core」に移植する場合、「Windows互換パック」を利用できます。「Windows互換パック」により20,000を超える追加APIにアクセスすることができます。
「Windows互換パック」には、「System.Drawing」や「EventLog」、「WMI」にパフォーマンスカウンター、Windowsサービスなどが含まれています。
詳細は以下を参照してください。
サンプル
9.Tiered Compilation
「Tiered Compilation(階層化コンパイル/段階的なコンパイル)」により、JITコンパイラーの活用が高度化され、アプリケーションのパフォーマンスが向上します。JITコンパイラーによるコンパイル時間はアプリの実行時間の一部となっています。
JITコンパイラーはより良いコードを生成するために、コードの最適化に多くの時間を必要とします。
しかし一度しか実行されないコードや使用頻度の低いコードは、最適化に時間を割くよりも最適化されていないコードを実行した方が時間が掛からなくて済むケースがあります。
ここに着目したパフォーマンスの最適化手法が「Tiered Compilation」です。
最初にJITコンパイラーは最小限の最適化と共に可能な限り早くコードを生成します。(第一段階)
その後頻繁に使用されるコードを検出すると、そのコード(メソッド)をさらに最適化し、以後そのコードが使用されます。(第二段階)
この第二段階のコンパイルは並列に行われ、第一段階のコンパイル速度と最適化コードの生成のバランスを実現します。
また「.NET Core」自身などプリコンパイルされたアセンブリ―に対してもJITコンパイラーはより良いコードを生成できるため、「Tiered Compilation」によりよく利用されるメソッドを最適化でき、ウェブサーバーなど長時間動作するアプリに対しても有用です。
現在「Tiered Compilation」はプレビューとして提供されており、以下の環境変数を設定することで「Tiered Compilation」を利用できます。
COMPlus_TieredCompilation="1"
またアプリケーション側で「Tiered Compilation」を有効にするには、以下を参考に「TieredCompilation」プロパティーを設定してください。
10.ソースリンク
「ソースリンク(SourceLink)」はバイナリーのソースデバッグを行えるようにするための仕組みです。この機能を利用するには、SourceLink情報の生成とSourceLinkをサポートしているデバッガーが必要です。
今のところ「Visual Studio 2017 15.3」がサポートしています。
また「.NET Core 2.1 RC SDK」では、シンボル、バイナリー、NuGetパッケージのSourceLink情報の生成をサポートしています。
「SourceLink」に関する情報やサンプルは、以下を参照してください。
11.自己完結型アプリの展開
自己完結型アプリを展開できるようになりました。その他
その他の情報です。ASP.NET Core 2.1及びEntity Framework Core 2.1のリリース
「.NET Core 2.1」と同時に、「ASP.NET Core 2.1」及び「Entity Framework Core 2.1」もリリースされました。各リリースアナウンスは、以下を参照してください。
Visual Studioによるサポート
以下の「Visual Studio」は、「.NET Core 2.1」をサポートしています。- Visual Studio 15.7
- Visual Studio for Mac
- Visual Studio Code