2022-01-14: ECMA C# draft standard, .NET Framework January Updates, State of the Windows Forms Designer

Published on Friday, 14 January 2022

トピックス

The ECMA C# draft standard and the Microsoft C# spec have finally converged.

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/language-specification/readme

ECMA 標準の C# のドラフトが Microsoft の C# 仕様と収束する形になり、docs.microsoft.com 上で閲覧できるようになった。現在ドラフトとして進行しているバージョンは C# 6 となっている。

.NET Framework January 2022 Security and Quality Rollup Updates - .NET Blog

https://devblogs.microsoft.com/dotnet/net-framework-january-2022-security-and-quality-rollup-updates/

.NET Framework の2022年1月のセキュリティー修正と品質ロールアップアップデートがリリースされた。

このリリースでは DoS 脆弱性に対するセキュリティー修正といくつかの品質向上の不具合修正が含まれている。

State of the Windows Forms Designer for .NET Applications - .NET Blog

https://devblogs.microsoft.com/dotnet/state-of-the-windows-forms-designer-for-net-applications/

Visual Studio の .NET (Core 3.1, 5, 6) 向け Windows Forms アプリケーションのためのデザイナーの現状についての記事。

現状、.NET Framework の Windows Forms 向けのデザイナーと .NET の Windows Forms 向けのデザイナーでは機能に差があり、その差を埋める作業が続いている。

記事では何故新しいデザイナーが必要となったのか、新しいデザイナーは Out-of-Process モデルで動作する上でどのようにして Visual Studio と協調動作しているのかといったことが説明されている。その上でこれから対応予定の機能についても触れている。

Fair Trade Software License | Duende Software Blog

https://blog.duendesoftware.com/posts/20220111_fair_trade

IdentityServer の Community Edition の機能制限がなくなり Enterprise Edition 相当となった。

多くのプロジェクトで採用されている認証フレームワークの IdentityServer は2年前にフリーソフトウェアから商用ライセンスモデルへと移行し、その後小規模収益企業や個人向けに以前のフリーソフトウェア版とほぼ同レベルの機能を持つ Community Edition をリリースした。今後 IdentityServer v6 以降の Community Edition が Enterprise Edition 相当の機能を提供するようになる。

Dunde Software ではこの大きな収益を持つ企業や個人には支払いを求め、小規模な企業や個人は低価格または無料で始められるライセンスモデルをフェアトレードソフトウェアライセンスと呼んでいる。

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

【Visual Studio】 Naming Style 設定 | ++C++; // 未確認飛行 C ブログ

https://ufcpp.net/blog/2022/1/naming-style/

フィールドの命名規則として _ をつけるようなスタイルを EditorConfig に記述する方法についての記事。

WPF から Windows App SDK に移行を試してみた

https://zenn.dev/okazuki/articles/migrate-to-windowsappsdk-from-wpf

.NET Core 3.0 の WPF 製サンプルアプリで Windows App SDK への移行を行ってみたという記事。依存ライブラリーの代替や苦労した点について書かれている。

Feature Management using Consul KV store in ASP.Net core

https://dev.to/niteshsinghal85/feature-management-using-consul-kv-store-in-aspnet-core-5a1d

ASP.NET Core アプリから Consul KV に保存された設定を取得してフィーチャー切り替えを行うという記事。

【C# 11 候補】defaultable value type | ++C++; // 未確認飛行 C ブログ

https://ufcpp.net/blog/2022/1/defaultable/

参照型で null を受け入れる null 許容型があるのと同様に、値型の default を受け入れる default 許容型を用意してフロー解析によってガードするという C# 11 候補の機能についての記事。

ImmutableArray 構造体のように default のままでは困る型を取り扱いに使われる。

[C#]CollectionsMarshal の解説

https://zenn.dev/naminodarie/articles/a950920fe7d1a5

.NET 5 で導入された CollectionsMarshal クラスのメソッドについての記事。.NET 6 で追加されたメソッドについても触れている。

Bringing Code Cleanup on Save To Visual Studio 2022 17.1 Preview 2

https://devblogs.microsoft.com/visualstudio/bringing-code-cleanup-on-save-to-visual-studio-2022-17-1-preview-2/

Visual Studio 2022 17.1 Preview 2 で導入された保存時のコードフォーマットの設定とその動作の様子についての記事。

MemberNotNull (値型) 判定 | ++C++; // 未確認飛行 C ブログ

https://ufcpp.net/blog/2022/1/member-not-null/

MemberNotNull 属性が非 null であるはずの値型のフィールドやプロパティーに対してもフロー解析を行っているということについての記事。

Diagnostics on Kubernetes: Obtaining a Memory Dump

https://dev.to/damonjames/diagnostics-on-kubernetes-obtaining-a-memory-dump-kgb

Kubernetes の Pod で動いている .NET アプリケーションのメモリーダンプを取得することについての記事。

記事では dotnet-gcdump ツールを使用して、Pod の中でダンプを取得した後ローカルにコピーするという方法が紹介されている。

Exploring hosting startup assemblies in ASP.NET Core

https://medium.com/@saravananganesan/exploring-hosting-startup-assemblies-in-asp-net-core-c272c6827661

ASP.NET Core アプリケーション起動時に自動でアセンブリを読み込むホスティングスタートアップアセンブリの仕組みを使用して Application Insights のようにロギングの仕組みを自動で読み込ませる方法についての記事。

.NET Data Frameworks Biweekly Updates (2022) · Issue #27185 · dotnet/efcore

https://github.com/dotnet/efcore/issues/27185

Entity Framework などデータフレームワークの隔週アップデートの情報の2022年1月13日号。

EF Core 7 のプランがあがっていることや EF Core 6.0.2 のリリースが来月を予定していることなどが書かれている。

Write a URL Shortener in 26 Lines of Code with .NET Minimal APIs

https://medium.com/infobipdev/write-a-url-shortener-in-26-lines-of-code-with-net-minimal-apis-52e110a07a25

ASP.NET Core の Minimal API で26行で短縮 URL サービスのサーバーを作ってみるという記事。

Performance analysis of EF/EF Core read operation with or without AsNoTracking() using Benchmark.net

https://medium.com/@malikmutasim2121/performance-analysis-of-ef-ef-core-read-operation-with-or-without-asnotracking-using-benchmark-net-dd88ced3f6f1

EF/EF Core で AsNoTracking した際の読み取りパフォーマンスについての記事。

ベンチマーク結果としては AsNoTracking しているケースでパフォーマンスがよく、読み取り専用であれば価値はあるとしている。

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

C# to Dart Converter

https://www.csharp2dart.com/

C# のクラス定義から Dart の JSON シリアライズ/デシリアライズのコードに変換するツール。

Cysharp/WebSerializer: Convert Object into QueryString/FormUrlEncodedContent for C# HttpClient REST Request.

https://github.com/Cysharp/WebSerializer/

HTTP のリクエストに使用するクエリーストリング(?q=foo&bar=baz)をクラスなどから効率よく組み立てる仕組みを提供するライブラリー。文字列だけでなく HttpClient で使用できる HttpContent を生成する機能も提供している。

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

ツイート

リフレクションでメソッドの IL を取り出して読みだす方法について。

.NET 6 で Thread Pool がマネージドコードで書き直され、"sync over async" と呼ばれる非同期を同期待機するアンチパターンによるブロッキングを検出して新しいスレッドを立ち上げるようになった。("sync over async" は待機スレッドがブロック状態となり、二つのスレッドがないと完了できなくなるためスレッドプール枯渇の原因となる)

.NET の gRPC 実装が最新のベンチマークで1位を取ったという話。

Microsoft Edge のウィンドウタイトルの "Microsoft Edge" 部分にはゼロ幅スペースが含まれているという話。そのような奇妙なことをしている理由はタッチパッドのドライバーが Microsoft Edge をウィンドウタイトルで検出して EdgeHTML 版だと思って処理するものがあったため(つまり互換性のために引っかからないようにした)とのこと。

ImageMagick に ARM64 版 Windows の対応が入ったのち、Magick.NET も対応を行うとしていたがその準備ができたので近く Magick.NET の ARM64 向け対応をリリースするという話。

メソッドグループのデリゲート変換のキャッシュを行うという PR がマージされ、C# 11 のコンパイラーに入るという話。

Deep Dive

[Proposal]: [String.SplitAsSpan] · Issue #63497 · dotnet/runtime

https://github.com/dotnet/runtime/issues/63497

文字列の SplitReadOnlySpan<char> で返すものが欲しいという提案 Issue。

.NET Community Toolkit に Tokenize 拡張メソッドがあるのでそれが使える、行単位であれば .NET 6 には ReadOnlySpan<char>.EnumerateLines() というメソッドがあるといったコメントがついている。

Enable GC regions by default by mangod9 · Pull Request #59283 · dotnet/runtime

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

GC のメモリー管理をセグメントからリージョンに変更したものをデフォルトにするという PR。一度マージされたがその後 NativeAOT で問題があり Revert された模様。

Added support for binding the raw request body by davidfowl · Pull Request #39388 · dotnet/aspnetcore

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

Minimal API のバインディングに PipeReader, Stream, ReadOnlySequence といったボディーを直接読み取れるようにするものを追加するという PR。

Razor Support (Results.Page(), etc.) for Minimal Endpoints · Issue #39431 · dotnet/aspnetcore

https://github.com/dotnet/aspnetcore/issues/39431

Minimal API の戻り値として Razor ページを返せるようにしたいという Issue。