2021-10-01: NuGet.org, Windows Community Toolkit v7.1, Npgsql 6.0.0 RC1, ReSharper 2021.3 & Rider 2021.3 EAP

Published on Friday, 01 October 2021

NuGet.org のパッケージ詳細ページのデザインが新しくなりました

いろいろな情報がすべて表示されていましたが、ターゲットフレームワークのバッジなど今後も追加したい要素があるということでタブベースのデザインに変更したそうです。README を表示する機能は少し前から実装されていましたが、より目立つ形になっているのでこれからリリースするパッケージには含めるのがよさそうです。

Windows Community Toolkit v7.1 がリリースされました。

Microsoft ID 認証に関する刷新やドロップシャドウを実現するためのスタイルの追加などが行われています。ドロップシャドウに関しては Microsoft Store アプリで使用されているそうです。

Npgsql v6.0.0 RC1がリリースされました。

複数ホストへの接続や Raw SQL、バッチ実行といったものがサポートされ、.NET 6 に向けた対応も含まれています。

ReSharper 2021.3 EAPRider 2021.3 EAP がリリースされました (EAP == プレビュー的なリリース)。

それぞれ C# 10 への対応や ReSharper は Visual Studio 2022 の対応、Rider は .NET 6 SDK への対応をはじめ、プロジェクトプロパティーや Debug の UI の変更などが含まれています。また Apple Silicon 向けのビルドも別途リリースされています。

トピックス

Introducing the New NuGet.org Package Details Page - The NuGet Blog

https://devblogs.microsoft.com/nuget/introducing-the-new-nuget-org-package-details-page/

NuGet.org のパッケージ詳細ページが4年ぶりに新デザインに刷新された。

デザイン変更した理由として、2021年の5月からパッケージに含まれる README を表示する機能が追加され、今後ターゲットフレームワークに関する情報を表示する予定もあるが、要素を追加するためのスペースが不足してきたためタブデザインで逃がすことにした。

記事では実際にリリースされるまでのフィードバックについても触れている。

Announcing Windows Community Toolkit v7.1 - Windows Developer Blog

https://blogs.windows.com/windowsdeveloper/2021/09/23/announcing-windows-community-toolkit-v7-1/

Windows Community Toolkit v7.1 がリリース。

Microsoft ID 認証のヘルパーとプロバイダーの刷新と Microsoft Graph API と OneDrive をサポートするヘルパー API とコントロールの提供。

コントロールにドロップシャドウをつけるためのスタイルを追加。既存の DropShadowPanel コントロールに代わるものでコントロールをラップせずスタイルとして適用する。実装には Win2D ベースの AttachedCardShadow と UWP の Composition ベースの AttachedDropShadow がある。AttachedCardShadow は Win2D への依存があり矩形のみのサポートとなるがパフォーマンスもよい、AttachedDropShadow は Composition を使用するため UWP アプリでのみ使用できるがマスク画像やテキストなどもサポートするといった違いがある。

RichSuggestBox コントロールの追加。@ によるユーザー名のサジェストのようなものを提供できる RichEditBox。

MVVM Source Generator がプレビューで追加され、ObservableProperty, ICommand, INotifyPropertyChanged 属性などでマークすることでボイラープレートコードの生成が行えるようになった。

そのほか Toolkit Labs という形で実験的なパッケージが提供されるようになった。今後 Lab リポジトリなどが用意される予定。すでに物体認識のような Intelligent APIs や視線入力の Gaze Controls といったものがある。

Release v6.0.0-rc.1 · npgsql/npgsql

https://github.com/npgsql/npgsql/releases/tag/v6.0.0-rc.1

Npgsql v6.0.0 RC1 がリリース。

6.0 ではロードバランシングなどを含むマルチホスト接続、タイムスタンプの改善、Raw SQL の発行や .NET 6 で導入されたバッチ API を使用したバッチ実行、.NET 6 の DateOnly/TimeOnly のサポートの追加など。

Raw SQL の発行は Npgsql がクエリーを書き換えずパラメータを送信するようにする仕組みで、以前の名前付きパラメータに代わるもの。名前付きパラメータはクエリーをパースし、書き換えてから PostgreSQL に送信していたが Raw SQL ではクエリーはそのまま PostgreSQL へ送信するため安全性が高まり、クエリーも効果的になるとのこと。

Release v1.41.0 · grpc/grpc

https://github.com/grpc/grpc/releases/tag/v1.41.0

gRPC v1.41.0 がリリース。

C# (C-core) に関連する変更としては非常に稀なケースでレスポンスのメタデータが破損してしまう問題の修正、non-ASCII な環境でネイティブライブラリーへのパスに non-ASCII な文字が含まれる場合に読み込み失敗してしまうことがある問題の修正など。

Rider 2021.3 Early Access Program Has Launched! | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2021/09/28/rider-2021-3-eap/

Rider 2021.3 EAP (早期アクセス) がリリース。

ソリューションにまつわる問題点を一覧できる Problems View が追加。コードに関連する問題以外も NuGet や .NET SDK といったツールや環境に関する問題を列挙してその場で対応できる。

.NET 6 SDK に対応、Debug タブの UI 変更、デバッガーの改善により UWP のサポートと Windows 上での Windows Docker コンテナー内でのデバッグが可能となった。

file-scoped namespace のような C# 10 に関連した言語の対応やコード解析、SQL 言語 Injection のサポート改善、Unity 向けのコードで XML ドキュメントを Tooltip 属性に変換する機能、Apple Silicon 向けビルドの提供、プロジェクトとソリューションのプロパティーウィンドウの改修など。

ReSharper 2021.3 Starts Early Access Program! | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2021/09/28/resharper-2021-3-eap/

ReSharper 2021.3 EAP (早期アクセス) がリリース。

Visual Studio 2022 Preview がサポートされ、file-scoped namespace のような C# 10 に関連した言語の対応やコード解析の改善が行われた。

Namespace.Type.Member といった FQN 形式でコピーする Copy FQN が Copy Code Reference に変わり、GitHub へのリンクやカスタム URL パターンを定義してコピーできるようになった。

.NET 5 SDK から対応した AnalyzerConfig ファイルに ReSherper も対応した。パラメータやフィールドを LanguageInjection 属性でマークすることで Language Injection を有効化できるようになった。

dotMemory は Windows では ETW イベントを使用してアロケーションをサンプリングできるように。正確さは以前の手法には劣るがパフォーマンスペナルティがない、集めるために有効にする必要がない、すでに動作中のアプリケーションでも集められるといった利点がある。

Avoiding Memory Leaks in Visual Studio Editor Extensions - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/avoiding-memory-leaks-in-visual-studio-editor-extensions/

Visual Studio のインプロセス拡張でのメモリーリークを防ぐための VS IDE チームが持つベストプラクティスの紹介。

MEF パーツによるメモリーリークでは ITextView のような重いオブジェクトの参照を一つ持つだけでも関連するソリューションまで参照が広がり、多くのリークが発生する例が挙げられている。対策として MEF パーツには強参照/ステートを持たない、持つ場合にはスコープのライフタイムに限定できるようにする、どうしても参照を持つ場合には WeakReference を使う。

C# のイベントリスナーのリークの例も同様に、イベントを購読する際に重いオブジェクトへの参照が間接的に発生してしまう。対策として ITextView.Close のような不要になるタイミングでの購読解除や IDisposable を IDE が呼び出すものであれば Dispose を実装する。

他にも静的なステートや WPF のデータバインディングの例が挙げられている。また、それらメモリーリークを解析するためのツールについても触れている。

Announcing: Azure credits for open source projects - Microsoft Open Source Blog

https://cloudblogs.microsoft.com/opensource/2021/09/28/announcing-azure-credits-for-open-source-projects/

Open Source Initiative (OSI) に承認されたライセンスで提供しているオープンソースプロジェクトに対して Azure のクレジットを提供するプログラムを開始。現時点で FreeBSD や Haskell といったプロジェクトが参加している。

VS Code in the browser for everyone

https://www.gitpod.io/blog/openvscode-server-launch

Gitpod が Gitpod や GitHub Codespaces のように Visual Studio Code をリモートサーバーで稼働させる OpenVSCode Server を公開。

Visual Studio Code 本体には GitHub Workspaces のような形で実行するためのパーツが欠けているため、フォークして最小の変更で埋めることでサーバーで動作できるようにしている。Docker をはじめ AWS や GCP といったクラウド環境での起動方法も用意されている。

Gitpod との直接の違いは環境も含めすべてマネージドであって欲しいか、あるいはリモートで Visual Studio Code が動作しそこにアクセスしたいかにあるとしている。

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

How to Deploy a Dockerized Web App to Heroku using the GitHub Actions

https://enlear.academy/how-to-deploy-a-dockerized-web-app-to-heroku-using-the-github-actions-f16c00b19621

Docker イメージにした .NET の Web アプリケーションを GitHub Actions から Heroku にデプロイして動かす方法についての記事。

Implicit Usings in .NET 6

https://www.hanselman.com/blog/implicit-usings-in-net-6

Implicit using について簡単に紹介する記事。

C# 10.0 の補間文字列の改善

https://ufcpp.net/study/csharp/start/improvedinterpolatedstring/

C# 10 での補完文字列 (String interpolation) の改善についての記事。

InterpolatedStringHandler 属性を持つハンドラー型を使用した文字列フォーマットの展開例や実装例、オーバーロード解決や .NET 6 で String クラスなどに追加された API についても触れている。

自作のWPFアプリを後から自動テスト・DI・CI/CD対応にしてみる。その1 - Qiita

https://qiita.com/soi/items/273e60b2a48d57ae762f

WPF アプリケーションの自動テストと DI の導入、CI 対応についての記事。

テストは xUnit を、DI は Microsoft.Extensions.DependencyInjection を採用。CI は GitHub Actions でカバレッジの取得や Release の作成まで行う。

.NET 6 の Blazor のコンポーネントでクエリ パラメーターを使うのが簡単になりました

https://zenn.dev/okazuki/articles/blazor-wasm-rc1-queryparam

.NET 6 Preview 7 以降の Blazor に追加されたクエリーストリングをパラメーターとして受け取る SupplyParameterFromQuery についての記事。

NavigationManager クラスに追加されたアプリケーション側から URL やそのパラメーターを変更するためのメソッドについても触れている。

C# での Web アプリ開発で、要求 URL 中のクエリ文字列をいい感じに読み取る - 特に Blazor WebAssembly (とりわけ .NET 5 以前) での注意点 : @jsakamoto

https://devadjust.exblog.jp/28884450/

Web アプリケーションでのクエリーストリングのパースについての記事。

HttpUtility.ParseQueryStringUriExtensions.ParseQueryString の違いについてや Blazor (.NET 5) での注意など。

.NET 6 の Blazor で追加された <head> タグの中を変更する機能の紹介

https://zenn.dev/okazuki/articles/blazor-dotnet6-headoutlet

.NET 6 の Blazor で導入された head 要素に関するコンポーネントについての紹介記事。

head 要素にページごとに要素を追加できる HeadContent コンポーネントと、ページのタイトルを設定できる PageTitle コンポーネントが追加された。

Entity Framework Biweekly Status Updates (2021) · Issue #23884 · dotnet/efcore

https://github.com/dotnet/efcore/issues/23884#issuecomment-926052851

2週ごとの Entity Framework のステータス更新レポートの9月23日分。EF Core 6.0 のステータスが Feature complete となったことなど。

How to retry failing dotnet tests in GitHub Actions

https://www.cazzulino.com/dotnet-test-retry.html

ネットワークが絡むテストなどで失敗しやすい (flaky) テストを GitHub Actions で実行する際にリトライする方法についての記事。

bash シェルスクリプトで失敗をカウントしつつ、失敗したテスト名を抽出して部分的にリトライする (--filter) といった手法。

Exploring the code behind WebApplicationBuilder: Exploring .NET Core 6 - Part 3

https://andrewlock.net/exploring-dotnet-6-part-3-exploring-the-code-behind-webapplicationbuilder/

.NET 6 の WebApplicationBuilder についての詳細に解説している記事。

WebApplicationBuilder は内部に何を抱えていて、どうアプリケーションが構築されるのかといった点に触れている。

Creating Roslyn API-based static analyzer for C#

https://medium.com/pvs-studio/creating-roslyn-api-based-static-analyzer-for-c-c0d7c27489f9

Roslyn ベースでの静的コードアナライザーの作成についての記事。

スタンドアローンで実行可能なコードアナライザーの作成方法から、シンタックスツリーの歩き方についてや Semantic Model とシンボルといったものの扱い方などにも触れている。

EFCore でレコードに対するトリガーを実行する - Qiita

https://qiita.com/karuakun/items/2db2e7ff8411e3a455cd

Entity Framework を使用してレコードに対する操作を行う際に C# のコードレベルで追加の処理を行う方法 (更新日のようなカラムを更新するとか) についての記事。

DataContext の拡張、インターセプターによるフック、EntityFrameworkCore.Triggered を使用した方法が紹介されている。

Azure Active Directory's gateway is on .NET Core 3.1! - .NET Blog

https://devblogs.microsoft.com/dotnet/azure-active-directorys-gateway-service-is-on-net-core-3-1/

Azure Active Directory のゲートウェイサーバーを .NET Framework から .NET Core 3.1 に移行したという2021年1月の記事。

.NET Core に移行を完遂するにあたって Web サーバーの検討、アプリケーションの移行、段階的なロールアウトを行ったことについて書かれている。 また .NET Framework の ASP.NET との挙動の違いといった移行の中であった学びにも触れている。

Custom deployment layout for Blazor WebAssembly apps - ASP.NET Blog

https://devblogs.microsoft.com/aspnet/custom-deployment-layout-for-blazor-webassembly-apps/

.NET 6 の Blazor WebAssembly ではカスタムしたアプリケーション配布パッケージを作成する仕組みを NuGet パッケージとして提供できるようになったことについての記事。

カスタム配置は例として DLL のダウンロードがブロックされている場合にひとまとめにした形でダウンロードするといった利用方法が考えられ、マルチパートなファイルにまとめるというサンプルコード/パッケージが公開されている。

JavaScript の Blazor の初期化プロセスに介入する部分と MSBuild タスクによってファイルをパブリッシュする部分の拡張ポイントが増えたことで実現可能となったとのこと。

WPF の Window 上に Direct3D12 でレンダリングする

https://zenn.dev/tan_y/articles/25cc05576ef11a

.NET 5 の WPF アプリケーションのウィンドウ上に Direct3D12 でレンダリングした結果を表示する方法についての記事。

WindowsFormsHost を使用したウィンドウにレンダリングする方法、D3DImage を使用した WPF を介してレンダリングする方法がそれぞれの長所/短所と共に紹介されている。

The code worked differently when the moon was full

https://www.hanselman.com/blog/the-code-worked-differently-when-the-moon-was-full

3-4週間おきにスレッドプールのスレッド数がコア数またはコア数+20を行ったり来たりする謎のバグについての記事。

これは Windows 95 で有名な 49.7 日問題と似て PortableThreadPoolShouldAdjustMaxWorkersActive メソッドの中で Environment.TickCount による値を使用していたため。PortableThreadPool ではヒルクライム アルゴリズムを用いてスレッド数を調整する仕組みとなっているがこれが適切に呼び出されない周期が発生していた。

int priorTime = Volatile.Read(ref _separated.priorCompletedWorkRequestsTime);
int requiredInterval = _separated.nextCompletedWorkRequestsTime - priorTime;
// currentTimeMs が Environment.TickCount の値。Environment.TickCount は 24.9 日で負に変わる。
// priorCompletedWorkRequestsTime と nextCompletedWorkRequestsTime は起動時には 0 となっている
// この時 Environment.TickCount が負を返すと elapsedInterval は負になる
int elapsedInterval = currentTimeMs - priorTime;
if (elapsedInterval >= requiredInterval)
{
    // ヒルクライムが実行される == スレッドの数が調整される
    // priorCompletedWorkRequestsTime と nextCompletedWorkRequestsTime も更新する

Using the Model Builder and AutoML for Creating Lead Decision and Lead Scoring Model in Microsoft ML.NET

https://medium.com/@cekikjmiodrag/utilizing-the-model-builder-and-automl-for-creating-lead-decision-and-lead-scoring-model-in-19888f12d529

Model Builder と AutoML を使用してリードスコアリングモデルを ML.NET で使用するステップバイステップの記事。

A .NET Object from allocation to collection

https://github.com/Maoni0/mem-doc/blob/master/presentation/ObjectJourney.pptx (PowerPoint Online で開く)

オブジェクトのインスタンスを生成した際のアロケーションで OS やハードウェア上でのメモリーから始まり GC されるまでを解説したスライド。

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

ChilliCream/hotchocolate: Welcome to the home of the Hot Chocolate GraphQL server for .NET, the Strawberry Shake GraphQL client for .NET and Banana Cake Pop the awesome Monaco based GraphQL IDE.

https://github.com/ChilliCream/hotchocolate

GraphQL 2021 draft spec に対応した GraphQL サーバーとクライアントのライブラリー。Monaco ベースの GraphQL エディターも提供されている。

GraphQL for .NET (graphql-dotnet) との違いはパフォーマンス、より良いパーサー、フィルターやミドルウェア、フレキシブルな code-first アプローチなどがあるとのこと。

DataGenerator/mxProject.Devs.DataGenerator at main · mxProject/DataGenerator

https://github.com/mxProject/DataGenerator/tree/main/mxProject.Devs.DataGenerator

ランダムなテストデータを含むレコードを返すライブラリー。IDataReader を介したデータアクセスが可能。

ltrzesniewski/pcre-net: PCRE.NET - Perl Compatible Regular Expressions for .NET

https://github.com/ltrzesniewski/pcre-net

PCRE (Perl 互換正規表現) ライブラリーの .NET 向けのラッパーとなるライブラリー。

System.Text.RegularExpressions.Regex と似たインターフェースを提供している。

nsubstitute/NSubstitute: A friendly substitute for .NET mocking libraries.

https://github.com/nsubstitute/NSubstitute

使いやすさを重視したモックインスタンス生成用ライブラリー。

roubachof/Sharpnado.MaterialFrame: A modern Xamarin.Forms Frame component supporting blur, acrylic, dark mode. Implemented with RealtimeBlurView on Android (custom blurview) and UIVisualEffectView on iOS.

https://github.com/roubachof/Sharpnado.MaterialFrame

Xamarin.Forms 向けのクロスプラットフォームなブラー/アクリルエフェクトを実現するコンポーネントのライブラリー。

jamesmh/coravel: Near-zero config .NET Core micro-framework that makes advanced application features like Task Scheduling, Caching, Queuing, Event Broadcasting, and more a breeze!

https://github.com/jamesmh/coravel

設定がほとんど不要なタスクスケジューラーサービスを提供するライブラリー。

キャッシュやキューイング、メール送信といった機能も持っている。ダッシュボードなどを提供する有償版もある。

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

Programming Idioms

https://www.programming-idioms.org/

様々なプログラミング言語によるパターン別の実装例を載せているサイト。(例: C# で文字列を逆順にするコード)

Apply rounded corners in desktop apps - Windows apps | Microsoft Docs

https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/apply-rounded-corners

Windows 11 の角丸ウィンドウに対するアプリケーションで行う対応についてのドキュメント。

デフォルトでは角丸となるが角丸とならないケース、意図的に角丸を抑制したいケースでの C#/WPF と C++ による対応方法についてなど。

2021 - UnoConf 2021

https://unoconf.com/

Uno Platform のカンファレンスが2021年11月30日の正午 (日本時間 2021年12月1日午前2時) にオンラインで開催。

AspNetCoreDiagnosticScenarios/AsyncGuidance.md at master · davidfowl/AspNetCoreDiagnosticScenarios · GitHub

https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md

Devid Fowler 氏による非同期プログラミングのベストプラクティスガイド。

Hello World - C# の概要に関する対話型チュートリアル | Microsoft Docs

https://docs.microsoft.com/ja-jp/dotnet/csharp/tour-of-csharp/tutorials/hello-world

Web ブラウザー上で Hello World を出力するような C# コードを記述、実行できるインタラクティブなチュートリアル。

ツイート

続くスレッドで C# 10 の数々の新機能を1枚画像で簡単に紹介。Constant string interpolation, Extended property patterns, File scoped namespaces, Global using などなど。

EditorConfig ファイルに csharp_style_namespace_declarations = file_scoped と設定しておくことで新しいクラスファイルを作成する際などで File-scoped namespace を使用したものを生成できるというテクニック。

ソリューションエクスプローラーのプロジェクトのコンテキストメニューに "Start Without Debugging" (デバッグなしで実行) が追加された。

async メソッドは async メソッドからしか呼べない話。

Go や Java の Project Loom では viral (感染的) ではないアプローチを取っているが、.NET では難しい理由がある。例えば一つは相互運用のためのパフォーマンスにかかわる問題で .NET には高機能な FFI (P/Invoke) があるがグリーンスレッドからのコンテキストスイッチで問題となる。

他に .NET にはメモリーをピンするという仕組みがあることもあげている。これはユーザーモードスレッドを実装したとするとスタックを動的に広げる必要がある際にコピーが必要となるが、メモリーのアドレスが変わってしまうためできない。代わりに linked list で持つなどが考えられるがパフォーマンスに問題が出る、また async state machine は .NET におけるある種の linked list としてもみえるといった話など。

.NET 6 の Blazor WebAssemlby では Native Dependencies という機能により、C# から外部の WASM を JavaScript 相互運用なしで P/Invoke できるので Rust などを直接呼び出せるという話。

Deep Dive

Obsolete thumbtacked AssemblyName properties by i3arnon · Pull Request #59522 · dotnet/runtime

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

AssemblyNameProcessorArchitecture, HashAlgorithm, VersionCompatibility は.NET Core では意味をなさないため非推奨としてマークするという PR。

QueryStringEnumerable API by SteveSandersonMS · Pull Request #33910 · dotnet/aspnetcore · GitHub

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

クエリーストリングを Span ベースで取り扱って列挙する内部 API の実装 PR。QueryStringEnumerable 自体は公開されていない。

Port DllImportGenerator to dotnet/runtime by jkoritzinsky · Pull Request #59363 · dotnet/runtime

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

P/Invoke のコードを Source Generator でコード生成をする DllImportGenerator を別リポジトリから dotnet/runtime に引っ越してきた PR。

コードを生成することでマーシャリングの調査やカスタマイズが行いやすくなることが目的のよう。

C# string formatting with negative numbers are not working as expected in net5.0 · Issue #59570 · dotnet/runtime

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

double-0.0ToString("f1") すると .NET Framework と .NET 5 で結果が違うという Issue。

これは .NET Core 3.0 で小数点のパースとフォーマットに手が入った影響で正しく符号がつくようになったことによるもの。もし以前と同様の結果を得たい場合は ToString("0.0;-0.0;0.0") という3セクションフォーマットで指定する。

Augment Regex extensibility point for better perf and span-based matching · Issue #59629 · dotnet/runtime

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

Regex にパフォーマンスのためと、Span ベースマッチングのために拡張ポイントを用意したいという話。

StackTrace Explorer Implementation by ryzngard · Pull Request #56315 · dotnet/roslyn

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

テキストとしてクリップボードにコピーしたスタックトレースからジャンプしたりできる Stack Trace Explorer の実装 PR。

[API Proposal]: bool HashSet.Update(T value, out T actual) · Issue #59468 · dotnet/runtime

https://github.com/dotnet/runtime/issues/59468#issuecomment-925609693

元は HashSet<T> に Update が欲しいという話で、やりたいこと的には Dictionary<TKey, TValue> だが Dictionary には Update がないという話になったところ、GetOrSet に相当するメソッドであれば .NET 6 RC1 で CollectionsMarshal.GetValueRefOrAddDefault というものが増えたのでそれで実装できるというテクニック。

[API Proposal]: File.WriteAllBytes overload for Span and ReadOnlySpan · Issue #59770 · dotnet/runtime

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

File.WriteAllBytesSpan/ReadOnlySpan を受けるオーバーロードが欲しいという提案。

既に過去に似た提案があり、File.Write*/File.Append* は特に高レベルな API なのに対して Span のような低レベルな API を組み合わせるのが不自然、これらのメソッドはパフォーマンスよりも利便性に特化していること、初心者向けのコア API を汚染することといった点でデザイン上なしという形で close されている。

[mono][wasm] Add beginnings of support for WASI. by vargaz · Pull Request #59752 · dotnet/runtime · GitHub

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

Mono WASM で WASI (WebAssemlby System Interface) のサポートを始めるという PR。

Add initial codespaces support for dotnet/runtime by eerhardt · Pull Request #59723 · dotnet/runtime

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

dotnet/runtime リポジトリを GitHub Codespaces 上でも編集/ビルドできるようにするための初期サポートの PR。