.NET Core 3 Preview 2 が出ました。 #donetjp

情報源: Announcing .NET Core 3 Preview 2 | .NET Blog

  • C# 8.0対応
    • usingで{}も()も不要に(詳しくは情報源へ)
    • スイッチ式(詳しくは情報源へ)
    • 非同期ストリーム
  • IEEE 浮動小数点取扱の改善
    • IEEE 754-2008への準拠
    • パースの改善(マイナス0の取扱など)
    • Math APIの改善(詳しくは情報源へ)
  • .NETプラットフォーム依存組み込み関数
    • SIMDやビット操作などで、特定のCPUアーキに依存するAPIを追加(.NET FrameworkでCPUアーキでの違いを極力取り除く方向だったので、.NET Coreになってからの大きな方向転換)
  • 高速インボックスJSONライター&JSONドキュメントの紹介(System.Text.Json)
  • Raspberry PIでのGPIOのサポート
  • ローカルdotnetツールの改善
  • アセンブリのアンローダビリティ(詳しくは情報源へ)
  • Windowsネイティブでの相互運用性
    • CoCreate COM APIとActivate WinRT APIの機能追加(詳しくは情報源へ)
  • WPFとWindows Formsの追加(詳しくは情報源へ)
  • Visual Studioサポート。VS 2019 Preview2以降が必要です。
  • デスクトップアプリケーションのMSIXによるデプロイ(詳しくは情報源へ)
  • snapによるLinuxへのインストール(詳しくは情報源へ)
  • サポートプラットフォーム(OS)
    • Windows Client: 7, 8.1, 10 (1607+)
    • Windows Server: 20012 R2 SP1+
    • macOS: 10.12+
    • RHEL: 6+
    • Fedora: 26+
    • Ubuntu: 16.04+
    • Debian: 9+
    • SLES: 12+
    • openSUSE: 42.3+
    • Alpine: 3.8+
  • サポートプラットフォーム(CPUアーキ)
    • x64 on Windows, macOS, and Linux
    • x86 on Windows
    • ARM32 on Windows and Linux
    • ARM64 on Linux

Visual Studio 2019 Preview 2でのWindows Forms/WPF

Visual Studio 2019 Preview 2がインストールされた環境に、.NET Core 3.0 Preview 2をインストールするとプロジェクトウィザードに、Windows Fromes(.NET Core)とWPF(.NET Core)が追加されます。

残念ながらGUIのデザイナーは使えません。(WPFも同様)

COM Interop

以下のサンプルがちゃんと動きました。

samples/core/extensions/ExcelDemo at master · dotnet/samples

ただし、COMの参照はVSのGUIから出来ないのでcsprojファイルに手書きになります。(上のサンプル使う場合はそのままで良いです)

C# Async Stream

using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace AsyncStream
{
    class Program
    {
        static async Task Main(string[] args)
        {
            await foreach (var x in M(5, 1000))
            {
                Console.WriteLine(x);
            }
        }

        static async IAsyncEnumerable M(int n, int t)
        {
            for (int i = 0; i < n; i++)
            {
                await Task.Delay(t);
                yield return i;
            }
        }
    }
}