情報源: 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
.NET Core 3.0 Preview 2 入れて、やっと async streams まともに動いた。 pic.twitter.com/aWT9MWK5JI
— ++C++; // 管理人: 岩永 (@ufcpp) January 30, 2019
<span class="hljs-keyword">using</span> System;
<span class="hljs-keyword">using</span> System.Collections.Generic;
<span class="hljs-keyword">using</span> System.Threading.Tasks;
<span class="hljs-keyword">namespace</span> <span class="hljs-title">AsyncStream</span>
{
<span class="hljs-keyword">class</span> <span class="hljs-title">Program</span>
{
<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>)</span>
{
<span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-function"><span class="hljs-keyword">var</span> x <span class="hljs-keyword">in</span> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-number">5</span>, <span class="hljs-number">1000</span></span>))</span>
{
Console.WriteLine(x);
}
}
<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> IAsyncEnumerable</span><int><span class="hljs-function"> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> n, <span class="hljs-keyword">int</span> t</span>)</span>
{
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < n; i++)
{
<span class="hljs-keyword">await</span> Task.Delay(t);
<span class="hljs-keyword">yield</span> <span class="hljs-keyword">return</span> i;
}
}
}
}</int>
<span class="hljs-keyword">using</span> System;
<span class="hljs-keyword">using</span> System.Collections.Generic;
<span class="hljs-keyword">using</span> System.Threading.Tasks;
<span class="hljs-keyword">namespace</span> <span class="hljs-title">AsyncStream</span>
{
<span class="hljs-keyword">class</span> <span class="hljs-title">Program</span>
{
<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> Task <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>)</span>
{
<span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-function"><span class="hljs-keyword">var</span> x <span class="hljs-keyword">in</span> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-number">5</span>, <span class="hljs-number">1000</span></span>))</span>
{
Console.WriteLine(x);
}
}
<span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">async</span> IAsyncEnumerable</span><int><span class="hljs-function"> <span class="hljs-title">M</span>(<span class="hljs-params"><span class="hljs-keyword">int</span> n, <span class="hljs-keyword">int</span> t</span>)</span>
{
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < n; i++)
{
<span class="hljs-keyword">await</span> Task.Delay(t);
<span class="hljs-keyword">yield</span> <span class="hljs-keyword">return</span> i;
}
}
}
}</int>
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;
}
}
}
}