kledgeb UbuntuやLinuxの最新情報を紹介

.NET Core その68 - .NET Core 3.0.0 Preview 6がリリースされました

.NET Core 3.0.0 Preview 6がリリースされました

2019年6月12日、「.NET Core 3.0.0 Preview 6」がリリースされました。


リリース情報

「.NET Core 3.0.0 Preview 6」のリリース情報です。

  • リリースアナウンス:Announcing .NET Core 3.0 Preview 6
  • リリースノート:.NET Core 3.0.0 Preview 6 - June 12, 2019
  • ダウンロードとインストール:.NET Core 3.0.0 Preview 6 - June 12, 2019
  • 主な変更点:Notable Changes in 3.0.0 Preview 6
  • 不具合報告:.NET Core 3.0.0 Preview 6
  • 既知の問題:.NET Core 3.0 Preview Known Issue

ドキュメント

  • Migrating a Sample WPF App to .NET Core 3 (Part 1)
  • Migrating a Sample WPF App to .NET Core 3 (Part 2)
  • ASP.NET Core and Blazor updates in .NET Core 3.0 Preview 6
  • Announcing Entity Framework Core 3.0 Preview 6 and Entity Framework 6.3 Preview 6
  • API Difference netcoreapp3.0-preview5 vs netcoreapp3.0-preview6

Deb版.NET Core 3.0.0 Preview 6をインストールするには

現時点では、リポジトリーから「.NET Core 3.0.0 Preview 6」は提供されていないため、バイナリーを直接ダウンロードして「.NET Core 3.0.0 Preview 6」を起動してください。
詳細は「ダウンロードとインストール」を参照してください。

Snap版.NET Core 3.0.0 Preview 6をインストールするには

Snap版「.NET Core 3.0.0 Preview 6」の利用が推奨されています。
Snap版「.NET Core 3.0.0 Preview 6」をインストールするには、以下のコマンドを実行してください。

sudo snap install dotnet-sdk --beta --classic

「dotnet-sdk」は、以下のコマンドで利用できます。

dotnet-sdk.dotnet

もし「dotnet-sdk」コマンドで「dotnet-sdk.dotnet」を実行したいなら、以下のコマンドを実行してください。

sudo snap alias dotnet-sdk.dotnet dotnet

WPFとWindows Forms

WPFチームは、WPFの大部分のコードベースをGitHubに公開する作業が完了しました。

  • May Update for WPF on .NET Core 3.0
  • Add WindowsBase, PresentationCore, PresentationFramework (+more) sources

WPFに詳しい人なら、アセンブリ名は非常に親しみある名称になっています。

Alpine Dockerイメージ

今までは「x64」向けのDockerイメージのみ提供されていましたが、「ARM64」向け「.NET Core」と「ASP.NET Core」のDockerイメージが利用可能になりました。

以下のイメージを「Dockerfile」で指定したり、「docker pull」で利用可能です。

docker pull mcr.microsoft.com/dotnet/core/runtime:3.0-alpine-arm64v8
docker pull mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine-arm64v8

イベントパイプの改善

イベントパイプ(Event Pipe)がマルチセッションをサポートしました。
イベントをプロセス内の「EventListener」で受け取るのと同時に、別プロセスのイベントパイプクライアントを利用することもできます。

dotnet-counters

パフォーマンスの管理ツールである「dotnet-counters」では、以下の計測項目が追加されました。

  • % Time in GC
  • Gen 0 Heap Size
  • Gen 1 Heap Size
  • Gen 2 Heap Size
  • LOH Heap Size
  • Allocation Rate
  • Number of assemblies loaded
  • Number of ThreadPool Threads
  • Monitor Lock Contention Rate
  • ThreadPool Work Items Queue
  • ThreadPool Completed Work Items Rate

「dotnet-counters」はイベントパイプを利用して構築されています。
「dotnet-counters」のインストール方法や利用方法は、以下を参照してください。

  • dotnet-counters

ReadyToRunイメージを利用した.NET Coreアプリの最適化

アプリケーションアセンブリーを「ReadyToRun(R2R)」フォーマットでコンパイルすることで、「.NET Coreアプリ」の起動時間を改善することができます。
「R2R」は「Ahead Of Time(AOT/事前コンパイル)」コンパイルの一種です。

JITの作業量を軽減

「R2Rバイナリー」は、アプリの読み込み時に「JIT」が行う作業を軽減することで起動時間を改善します。
「R2Rバイナリー」には、「JIT」が生成するようなネイティブコードが含まれており、起動時のパフォーマンスに最も影響を与える場面で「JIT」に少し余裕を与えます。

バイナリーサイズは増加

「R2Rバイナリー」には「ILコード(Intermediate Languageコード)」と、それに対応するネイティブコード(起動時間の改善に寄与する)の両方が含まれているため、バイナリーサイズは増加します。
これはとあるシナリオで依然「ILコード」が必要になるためです。

.NET Core 3.0でサポート

「R2R」は「.NET Core 3.0」でサポートされ、それより前のバージョンではサポートされません。

パフォーマンスの計測例

「WPF」サンプルアプリを利用してパフォーマンスを計測した例です。
このサンプルアプリは自己完結型で、アセンブリーリンカーを使用していません。
サンプルアプリは以下を参照してください。

  • ridomin/msix-catalog

項目 ILのみ ReadyToRun
起動時間 1.9秒 1.3秒
メモリー使用量 69.1 MB 55.7 MB
アプリのサイズ 150 MB 156 MB

ReadyToRunイメージとは

「R2Rコンパイル」は、ライブラリーとアプリケーションバイナリーに対し実行可能です。
現時点では、ライブラリーはアプリの一部としてのみ「R2R」コンパイルが可能であり、「NuGet」パッケージとして提供されるバイナリーには適用できません。
そのサポートが必要ならフィードバックしてください。

NGEN

アセンブリのAOTコンパイルは長年.NETの構想として導入されてきたものであり、AOTはNGENまで遡ります。

  • Ngen.exe (ネイティブ イメージ ジェネレーター)

NGENはクライアントマシン上でコンパイルを実行しなければならないという欠点があります。
つまりアプリのビルド時にNGENイメージを生成することができないということです。

CrossGenとReadyToRun

「.NET Core」では「CrossGen」が導入され、「ReadyToRun」と呼ばれる新しいフォーマットでネイティブイメージを生成します。

  • CrossGen
  • ReadyToRun

「ReadyToRunイメージ」は、アプリのビルド時にネイティブイメージを構築でき、実行準備が完了しているという名のとおり、クライアントマシンでの追加作業は必要ありません。

ILアセンブリーとReadyToRunアセンブリー

互換性の観点から言うと「ReadyToRunイメージ」は「ILアセンブリー」に似ていますが、以下の主な違いがあります。
 
「ILアセンブリー」は「ILコード」だけを含むものです。
「ILアセンブリー」は動作に必要なフレームワークが提供されている環境なら、どこでも実行可能です。

例えば「netstandard2.0」アセンブリーは、「.NET Framework 4.6」以降及び「.NET Core 2.0」以降のフレームワーク上で動作可能です。
つまり「netstandard2.0」アセンブリーは、Windows/macOS/Linux、そしてIntel/ARMの32bit/64bitアーキテクチャー上で動作します。

その一方で「ReadyToRunアセンブリー」は、「ILコード」とネイティブコードを含みます。
これらは特定の最小.NET Coreランタイムバージョン及び実行環境(RID)向けにコンパイルされるものです。
例えば「netstandard2.0」アセンブリーをR2Rコンパイルするならば、「.NET Core 3.0」と「Linux x64」を指定してコンパイルすることになります。
この時「netstandard2.0」アセンブリーは、その環境もしくはその環境と互換性のある環境向けのネイティブコードを含んでいるため、その実行環境でのみ利用可能です。

現時点では自己完結型のみサポート

現時点で「ReadyToRun」は、SCD(自己完結型)でサポートされており、FDDではサポートされていません。
将来的にFDDでもサポートされる予定です。

クロスプラットフォームとアーキテクチャー

現在ReadyToRunコンパイラーは、クロスプラットフォーム/アーキテクチャーをサポートしていません。
アプリは実行対象と同じ環境でコンパイルする必要があります。
ただし以下の例外がああります。

Windows x64では、 Windows ARM32/ARM64/x86イメージのコンパイルが可能です。
Windows x86では、 Windows ARM32イメージのコンパイルが可能です。
Linux x64では、 Linux ARM32/ARM64イメージのコンパイルが可能です。

デフォルトでは無効になっている 

「R2R」によるコンパイルは、デフォルトでは無効になっています。
「R2R」によるコンパイルを有効にするには、開発者が明示的に「R2R」コンパイルを有効にする必要があります。
設定方法は上記リンク先を参照してください。

アセンブリーのリンク

「.NET Core 3.0 SDK」では、ILを解析して未使用のアセンブリーを取り除きアプリのサイズを削減するツールを提供しています。
自己完結型のアプリを配布する際、必要なアセンブリーのみを含めるようにすれば、アプリのサイズを減らすことができます。

ILリンカー

ILリンカーを利用してアプリのILを調査し、実際に必要なコードの検出を行い、使用されていないフレームワークライブラリーを取り除きます。
これによりアプリのサイズを有意に減らすことができます。

デフォルトでは無効になっている

この機能はデフォルトでは無効になっているため、開発者が明示的に有効にする必要があります。
設定方法は上記リンク先を参照してください。

リンカーとR2Rの組み合わせ

この機能とR2Rを組み合わせれば、アプリのサイズをなるべく抑えつつ、起動時間を改善することができます。
ただし現状WPF及びWindows Formsアプリで、リンカーとR2Rを組み合わせて使用することができません。
この問題は「.NET Core 3.0」リリース時に修正される予定です。

  • Double write during publish

注意

リフレクションや動的な機能を使用するアプリ及びフレームワークでは、リンカーが動的な振る舞いを把握できず、アプリ実行時のリフレクションに必要なフレームワークタイプを決定できません。

このようなアプリでは、リフレクションが必要とするすべてのタイプをリンカーに指定する必要があります。
また必ずアプリのテストを行い、動作に問題がないことを確認する必要があります。
詳細は以下を参照してください。

  • ILLink.Tasks
  • IL Linker

ネイティブホスティングのサンプル

ネイティブホスティングのサンプルが公開されました。
これはネイティブアプリケーション内で「.NET Core」をホスティングするサンプルアプリです。

  • .NET Core Hosting Sample

HTTP/2のサポート

「HttpClient」が「HTTP/2」リクエストの作成をサポートしました。
デフォルトは「HTTP/1.1」のままですが、HTTPリクエストメッセージにバーションを指定することで「HTTP/2」を利用できます。
また「HttpClient」の「DefaultRequestVersion」プロパティーにバージョンを指定することで「HTTP/2」を利用することも可能です。

.NET Core
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 26.04 その74 - Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象
    Qt6 で構築されたアプリがクラッシュする現象 Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象が報告されています。
  • Ubuntu 24.04 その104 - Ubuntu 26.04 LTS へアップグレードするには・アップグレードの注意事項
    Ubuntu 26.04 LTS へアップグレードするには 現在 Ubuntu 24.04 LTS を利用しているユーザーは、Ubuntu 26.04 LTS へアップグレードできます。
  • Ubuntu 24.04 その103 - Ubuntu 26.04 LTS へアップグレード可能に・2年分の変化が一気にやってくる
    Ubuntu 26.04 LTS へアップグレード可能に 2026年9月29日、Ubuntu 24.04 LTS から Ubuntu 26.04 LTS へアップグレード可能になりました。
  • Ubuntu 26.10 その35 - RISC-V 向け Ubuntu Desktop 登場
    RISC-V 向け Ubuntu Desktop 登場 Ubuntu Desktop 26.10 では、RISC-V 向けデスクトップイメージがリリースされます。
  • Ubuntu 26.10 その33 - Ubuntu 26.10 β版がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 β版がリリースされました 2026年10月1日、Ubuntu 26.10 β版 がリリースされました。
  • Ubuntu 26.10 その34 - Ubuntu と Rust に対する取り組み(2026年10月)
    Ubuntu と Rust に対する取り組み 2026年10月1日、Ubuntu と Rust に対する取り組みが以下で紹介されました。
  • Ubuntu 26.10 その38 - Ubuntu 26.10 がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 リリース 2026年10月15日、Ubuntu 26.10 がリリースされました。
  • Linux その440 - uutils coreutils 0.11.0 でコマンド実行時のエラーメッセージを大幅に改良
    コマンド実行時のエラーメッセージを大幅に改良 uutils coreutils 0.11.0 で、コマンド実行時のエラーメッセージが大幅に改良されました。
  • Ubuntu 26.04 その76 - CVE-2026-92392 含む curl の脆弱性22件修正・アップデートを
    curl の脆弱性22件修正 CVE-2026-92392 含む22件の curl の脆弱性に対応したセキュリティーアップデートがリリースされました。
  • Ubuntu 26.10 その32 - Snapdragon X2 に対応した Ubuntu 26.10 実験版登場
    Snapdragon X2 に対応した Ubuntu 26.10 実験版登場 2026年9月29日、Snapdragon X2 に対応した Ubuntu 26.10 実験版が登場しました。
記事のピックアップ
オプション