2022-04-19: .NET 7 Preview 3, MAUI RC1, .NET 6.0.4

Published on Tuesday, 19 April 2022

トピックス

Announcing .NET 7 Preview 3 - .NET Blog

https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-3/

.NET 7 Preview 3 がリリースされた。

Preview 3 では次のような変更が含まれている。

  • NativeAOT の改善
  • Observability: アクティビティートレースの状態をサンプラーで変更可能に
  • System.Composition.Hosting の API 改善
  • Write-Xor-Execute を有効にすることによる起動時間の短縮
  • コード生成 (JIT)
  • GC リージョンのデフォルト有効化
  • X500DistinguishedName の堅牢な生成 API

なお、Visual Studio 2022 17.2 Preview 3 での動作がテストされているため、使用にはプレビューチャンネルのインストールが推奨される。Visual Studio for Mac での対応は後日となるとのこと。

ASP.NET Core updates in .NET 7 Preview 3 - .NET Blog

https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-3/

.NET 7 Preview 3 での ASP.NET Core のアップデートについての記事。

  • Minimal API でのルートハンドラーに対するフィルターやテスタビリティの向上
  • MVC と API のコントローラーでの TryParse による値のバインドのサポート
  • Results.Stream のオーバーロード
  • HTTP/2 での一つのコネクションに対する複数のストリームがある場合のパフォーマンス向上
  • スタートアップ時間計測に使用できる ServerReady イベント
  • 開発時例外ページのダークモード対応

Announcing Entity Framework Core 7 (EF7) Preview 3 - .NET Blog

https://devblogs.microsoft.com/dotnet/announcing-entity-framework-7-preview-3/

Entify Framework Core 7 Preview 3 がリリースされた。

Preview 3 での改善点として次のものを紹介している。

  • SQL Server の INSERT のロジックの改善
  • UPDATE/DELETE での RETURNING/OUTPUT 句の使用
  • ReaderModificationCommandBatch のリファクタリング
  • 事前チェックとしての MaxBatchSize の再実装

その他、記事では T4 テンプレートを使用したデータベースリバースエンジニアリング/スキャフォールディングについても触れている。

.NET MAUI Release Candidate - Ready for cross-platform app development - .NET Blog

https://devblogs.microsoft.com/dotnet/dotnet-maui-rc-1/

MAUI の RC1 がリリースされた。

このリリースから "go live" サポートポリシーが適用され、実運用プロダクトでの使用であっても Microsoft のサポートを受けられるようになる。

現時点で MAUI の RC1 を使用しての開発には Visual Studio 2022 17.2 Preview 3 が必要となる。Mac 上で開発するにはコマンドラインからインストールするか、今後の Visual Studio for Mac の Preview リリースを待つ必要がある。

記事では MAUI に含まれるコントロールやテンプレートについて、コントロールのカスタマイズについても触れている。

.NET April 2022 Updates – .NET 6.0.4, .NET 5.0.16 and, .NET 3.1.24 - .NET Blog

https://devblogs.microsoft.com/dotnet/net-april-2022-updates-net-6-0-4-net-5-0-16-and-net-3-1-24/

.NET の2022年4月更新で .NET 6.0.4, .NET 5.0.16, .NET 3.1.24 がリリースされた。

セキュリティーの修正はなく、小さな改善や不具合の修正が含まれている。

また、今回のリリースからサーバーオペレーティングシステム (Windows Server) での Microsoft Update 経由での .NET の更新が可能になった。この機能はオプトインとなるためデフォルトでは自動更新されない。

.NET Framework April 2022 Security and Quality Rollup Updates

https://devblogs.microsoft.com/dotnet/dotnet-framework-april-2022-updates/

.NET Framework の2022年4月セキュリティーと品質累積アップデートがリリースされた。

サービス拒否 (DoS) に関するセキュリティー修正といくつかの品質向上とバグ修正が含まれている。

Announcing .NET Community Toolkit v8.0.0 Preview 3 - #ifdef Windows

https://devblogs.microsoft.com/ifdef-windows/announcing-net-community-toolkit-v8-0-0-preview-3/

.NET Community Toolkit v8.0.0 Preview 3 がリリースされた。

  • MVVM Toolkit の Source Generator
    • ObservableProperty の partial メソッドによる実装
    • コマンド取り消しのサポート
    • 生成されたプロパティーの変更通知のブロードキャスト
    • 診断機能の改善
  • グループ化されたオブザーバブルコレクションの改良

Visual Studio 2022 for Mac Preview 9 - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-for-mac-preview-9/

Visual Studio 2022 for Mac Preview 9 がリリースされた。

引き続き正式版に向けて問題の修正を中心に更新が行われている。

Introducing Central Package Management

https://devblogs.microsoft.com/nuget/introducing-central-package-management/

NuGet の新機能である一元的なパッケージ管理機能についての記事。

一元的なパッケージ管理機能が Visual Studio 2022 17.2, .NET SDK 6.0.300, NuGet 6.2.0 以降で使用できるようになった。

この機能は Directory.Packages.props というファイルに使用する NuGet パッケージのバージョンを記述しておき、各プロジェクトから参照する場合にはパッケージ名のみを指定することでバージョンを一元的に管理できるといった仕組み。

<!-- Directory.Packages.props -->
<Project>
  <ItemGroup>
    <PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
  </ItemGroup>
</Project>
<!-- ClassLibrary1.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" />
  </ItemGroup>
</Project>

記事では設定の仕方のほか、推移的パッケージのピン止め、パッケージバージョンの上書き、一元的なパッケージ管理機能の無効化などを説明している。

Unity 2021 Long Term Support for programmers | Unity

https://unity.com/releases/2021-lts/programming

Unity 2021.3 LTS がリリースされた。

C# 8 と .NET Standard 2.1 のサポートが追加され、IL2CPP のパフォーマンスも改善されている。

なお Unity の .NET Framework 4.8 プロファイルは .NET Standard 2.1 を包含するものとなり、純正の .NET Framework 4.8 とは異なる点に注意が必要(Microsoft の .NET Framework 4.8 は .NET Standard 2.1 をサポートしない)。

Cake v2.2.0 released

https://cakebuildnet.medium.com/cake-v2-2-0-released-74aa5e47f618

Cake 2.2.0 がリリースされた。

オプトインのスクリプトキャッシュ機能の追加のほか、いくつかのバグ修正や改善が行われている。

Breaking Change: Revert the Console Formatter Default in .NET 6 Container Images · Issue #216 · dotnet/announcements

https://github.com/dotnet/announcements/issues/216

.NET 6 ではコンテナーイメージ内で実行時にコンソールのロガーはデフォルトで JSON フォーマットで出力するようになっていたが、5月のサービス更新で元に戻す (通常の未指定時と同様のテキスト形式) というアナウンス。

Logging__Console__FormatterName 環境変数が Json となっていたものが未設定となるため、今後この挙動を維持したい場合には Logging__Console__FormatterNameJson を明示的に指定する必要がある。

C# 11 Preview Updates - Raw string literals, UTF-8 and more!

https://devblogs.microsoft.com/dotnet/csharp-11-preview-updates/

C# 11 Preview についての記事。

C# 11 で導入される予定の機能を紹介している。Raw string literals など一部の機能は既に Visual Studio 2022 17.2 Preview 3 または .NET 7 Preview 3 以降で使用できるが、それ以降を予定しているものも多いので注意。対応状況はLanguage Feature Statusを参照のこと。

  • Raw string literals
    • いわゆるヒアドキュメント的な文字列を埋め込む記法
  • UTF-8 文字列リテラル
    • byte[]Span<byte> といった型へ文字列を代入する形で UTF-8 バイト列となる記法
  • checked ユーザー定義演算子
    • 算術オーバー/アンダーフローの取り扱いが可能になる
  • 構造体の自動デフォルト
  • Span のパターンマッチング
  • メソッドグループ変換でキャッシュされたデリゲートを使用
  • パラメータ null チェックの削除
    • !! でパラメータに null がセットされていることをチェックして例外を投げる記法を一旦取り下げ
  • 小文字の型名に関する警告

ReSharper 2022.1 Release Candidate is out

https://www.jetbrains.com/resharper/nextversion/

ReSharper 2022.1 Release Candidate がリリースされた。

このリリースではコード解析に関する改善や ASP.NET Core 6 の Minimal API のエンドポイント対応、Visual Studio 内でのデコンパイラーでのメタデータツリービューの追加、その他不具合の修正などが行われている。

アーティクル、スライドなど

Using .NET To Validate JSON with JSON Schema

https://khalidabuhakmeh.com/using-dotnet-to-validate-json-with-json-schema

JsonSchema.NET と System.Text.Json で JSON Schema による JSON の検証を行う方法についての記事。

Supercharge your Git experience in VS

https://devblogs.microsoft.com/visualstudio/supercharge-your-git-experience-in-vs/

Visual Studio 2022 17.2 Preview 3 以降で導入されたコミットグラフ機能を有効にすることで Git の操作を高速化できることについての記事。

Streaming IAsyncEnumerable to RxJs front-end

https://medium.com/@markotny97/streaming-iasyncenumerable-to-rxjs-front-end-8eb5323ca282

IAsyncEnumerable による API からのストリーミングと、フロントエンドで RxJS を使用した処理についての記事。

Mono.Cecilを用いて2つのDLLの間の型の差分を出す | Yucchiy's Note

https://blog.yucchiy.com/2022/04/mono-cecil-class-diff/

Mono.Cecil を使用して2つのアセンブリに含まれている型の差分を取得する方法についての記事。

How segments and regions differ in decommitting memory in the .NET 7 GC

https://itnext.io/how-segments-and-regions-differ-in-decommitting-memory-in-the-net-7-gc-68c58465ab5a

.NET 7 で導入される GC のリージョンがセグメントからメモリーをデコミットする挙動についての記事。

Keeping up with .NET: learning about new features and APIs

https://andrewlock.net/keeping-up-with-dotnet-learning-about-new-features-and-apis/

.NET の新しい機能や API を学ぶのに役立つリソースの紹介記事。

Hybrid App Development With BlazorWebView — Blazor Lipstick For The Desktop Pig

https://medium.com/@devmawin/software-development-and-hybrid-app-development-with-blazorwebview-blazor-59297f399811

MAUI で WebView を使用する Blazor (Blazor Hybrid) アプリについての記事。

メール検証も!ASP.NET Core MVCに認証機能Identityを実装する - Qiita

https://qiita.com/YouKnow/items/f1b1946509dba07be439

ASP.NET Core MVC と ASP.NET Core Identity、SendGrid を使用してメール確認付き認証を実装するという記事。

配列のアクセス方法による速さの違い - Qiita

https://qiita.com/Hotari/items/9a69c4e02015c02d05ef

配列に対するアクセス方法(インデックスの指定やポインター)による速度の違いについての記事。

コメントでメモリーのアドレッシングが異なることで結果が変わってきているのではないかといったことも触れられている。

.NET6 単一ファイル時の実行パス取得について - Qiita

https://qiita.com/MinadukiSekina/items/59eb7e67018037092fc6

PublishSingleFile で単一実行ファイルとして生成したときに Assembly.Location を使用できない制限についての記事。

C#でMonacoEditor - Qiita

https://qiita.com/Yuki4/items/48c242c7795b43c2f34a

WPF アプリケーションで Monaco Editor (Visual Studio Code のエディター部分) を埋め込んで使用する方法についての記事。

Google Colaboratoryで.NET6.0を使う - Qiita

https://qiita.com/karuakun/items/14ffc4f8420e2a868241

Google Colaboratory で .NET Interactive をインストールすることで .NET 6 を使用するという方法についての記事。

ライブラリ、リポジトリ、ツールなど

サイト、ドキュメントなど

ツイート

.NET Core を Microsoft の内部チームで運用環境に展開した話のスレッド。機械翻訳でざっくりと…。

  • .NET Core が出た初期のころはあまりに新しすぎて「リアル」だと思われていなかった (外部からも)
  • そこで社内の利用者向けに小さな移行チームを立て問題を乗り越えたが、ギャップは多かった
  • .NET Framework への沢山の内部依存があった(今もある)。エコシステムを立ち上げるのは困難で .NET Core への移植の手助けをする必要があった。そして多くのチームは .NET Core に移植されていない NuGet パッケージにも依存していた
  • そのようにしてギャップを埋めていくと関心が集まってきて、Bing のようなアーリーアダプターが現れ、パフォーマンス向上を広めるの一役買った。最初の利用者を獲得するのは難しく、ほとんどのユーザーは枯れたものを使いたがる
  • 新しい API や Span といった作業をする前であっても、社内のチームは .NET Core に移行することでパフォーマンス向上やコスト削減できているという話が広まった
  • Microservices やコンテナー、Kubernetes でモダナイゼーションを行っているチームもあったのでパフォーマンスではなくモダナイゼーションの一部として採用される例もあった
  • .NET Core 3.1 以降、多くのチームが採用してパフォーマンス向上が続き、移行により 5-30% の改善が見られた (CPU, メモリー、スループット、レイテンシー)。さらに多くのチームが移行の手助けを望んだ
  • その頃には移行を経験したチームも揃い、事例も多くなってきたので移行に関する話が簡単になってきた。内部向けに .NET Core への移行コミュニティーを作った
  • 今では移行したいチームが多すぎて手が回らないし、今でも .NET Core への移行とモダナイゼーションによってパフォーマンスが向上したというメールを受け取る
  • 前年の影響が表れるには数年かかることもあるので楽しみながら .NET を使おう

スタックフレームの巻き戻しについての図解。

Deep Dive

Add MemoryExtensions.CommonPrefixLength by stephentoub · Pull Request #67929 · dotnet/runtime

https://github.com/dotnet/runtime/pull/67929

二つの Span などを比較して先頭の同じ要素の数を返す MemoryExtensions.CommonPrefixLength API を追加する PR。

Support built-in unsigned right shift operators. by AlekseyTs · Pull Request #60560 · dotnet/roslyn

https://github.com/dotnet/roslyn/pull/60560

符号なし右シフト演算子 (>>>) のサポートを追加する PR。

Introduce IBindableFromHttpContext<TSelf> by DamianEdwards · Pull Request #41100 · dotnet/aspnetcore

https://github.com/dotnet/aspnetcore/pull/41100

static abstract を利用して、Minimal API などでカスタムバインダーを見つけ・使用しやすくするという PR。

HTTP/2 output processing make over by davidfowl · Pull Request #40925 · dotnet/aspnetcore

https://github.com/dotnet/aspnetcore/pull/40925

HTTP/2 の出力処理にロックの代わりにキューを使用することでパフォーマンスを向上させるという PR。

Use "..."u8 in dotnet/runtime by stephentoub · Pull Request #67733 · dotnet/runtime

https://github.com/dotnet/runtime/pull/67733

Encoding.UTF8.GetBytesu8 サフィックスを持つ UTF-8 文字列に置き換えるという PR (ドラフト)。

Initial .NET Framework ARM64 support by jaredpar · Pull Request #60735 · dotnet/roslyn

https://github.com/dotnet/roslyn/pull/60735

Roslyn で ARM64 の .NET Framework のバイナリの生成をサポートするという PR。(親 Issue によると PDB のサポートの都合もありそう)

Implement Tar APIs by carlossanlop · Pull Request #67883 · dotnet/runtime

https://github.com/dotnet/runtime/pull/67883

tar アーカイブ形式のサポートを追加する PR。System.Formats.Tar 名前空間になる模様。