トピックス
Announcing the first-ever true .NET Single Project for Mobile, Web, Desktop, and Embedded apps
Uno Platform 5.2 がリリースされた。
このリリースでは Skia レンダラーの強化によるパフォーマンスの向上やマルチウィンドウのサポート、Uno SDK の改善、.NET 9 Preview のサポートなどが含まれている。
またプロジェクトテンプレートの更新により、単一のプロジェクトですべてのプラットフォームをサポートできるようになったとのこと。
Release 2.3.7 · mysql-net/MySqlConnector
https://github.com/mysql-net/MySqlConnector/releases/tag/2.3.7
MySqlConnector 2.3.7 がリリースされた。
このリリースではいくつかの不具合が修正されている。
.NET Aspire preview 6 - .NET Aspire
https://learn.microsoft.com/en-us/dotnet/aspire/whats-new/preview-6
.NET Aspire の Preview 6 がリリースされた。
このリリースでは Obsolete な API の削除や変更、Aspire ダッシュボードのトークンによる認証、Qdrant ベクターデータベースのサポート、その他細かい変更が含まれている。
Introducing Elastic's OpenTelemetry SDK for .NET
https://www.elastic.co/jp/blog/elastic-opentelemetry-distribution-dotnet-applications
Elastic .NET OpenTelemetry SDK のアルファーバージョンが公開された。
Elastic OpenTelemetry ディストリビューションは Elastic による OpenTelemetry のデフォルト構成や OpenTelemtry SDK を使用した拡張。現時点でのアルファリリースではバニラバージョンとの差異はほとんどないが今後機能追加を行う予定とのこと。
Building a scalable gateway with .NET for Microsoft AI - .NET Blog
https://devblogs.microsoft.com/dotnet/building-a-scalable-gateway-for-microsoft-ai/
Microsoft の Bing や Copilot といった AI サービスのフロントエンドゲートウェイを .NET と YARP で構築した事例について。
記事ではミラーリングやレートリミット、動的構成変更など YARP の柔軟な構成を活用した例を紹介している。
Release v8.1.0 · dotnet/orleans
https://github.com/dotnet/orleans/releases/tag/v8.1.0
Orleans v8.1.0 がリリースされた。
このリリースでは Aspire との統合がサポートされたほか、様々な修正と改善が含まれている。
アーティクル、スライドなど
Detecting blocking calls using async in C# | James Crosswell | Code Blog
https://www.jamescrosswell.dev/posts/async-detecting-blocking-calls
非同期メソッドにおいてブロッキングコールを調査する方法について。
記事では Ben.BlockingDetector を使用した検出とそれを Sentry に組み込んだことについて、Sentry 上で確認できるようにしたことについて書かれている。
.NETの正規表現 - キャプチャ
https://zenn.dev/sayurin/articles/76f6739d7ac75f
.NET の正規表現におけるキャプチャーについて。
名前付きキャプチャーが複数ある場合についてや F# での名前付きキャプチャーを自然に取り扱えるようにする方法など。
Refactor your C# code with primary constructors - .NET Blog
https://devblogs.microsoft.com/dotnet/csharp-primary-constructors-refactoring/
プライマリーコンストラクターを使用したリファクタリングについて。
記事では ILogger のようなものをコンストラクターで渡すパターンをプライマリーコンストラクターで置き換える例について紹介している。
Hacking together an AsciiMath parser for .NET
https://andrewlock.net/hacking-together-an-asciimath-parser-for-dotnet/
AsciiMath パーサーを .NET から扱う方法について。
記事ではいくつかの言語の AsciiMath パーサーを紹介して、最終的に JavaScript 実装を Jint を使用して .NET から実行できるようにするという方法を解説している。
ASP.NET Core Minimal API を本番でも大規模でも使えるように構成する - Qiita
https://qiita.com/takashiuesaka/items/654c6e0d0bb7c92854a8
ASP.NET Core Minimal APIs で API を定義、実装する際のコードを整理する手法の紹介 (翻訳)。拡張メソッドによる集約や MapGroup でのグルーピングなど。
How to create a link between two spans in OpenTelemetry
https://dev.to/koma_koma_d/how-to-create-a-link-between-two-spans-in-opentelemetry-424i
OpenTelemetry の Span 間の関連付けをする span-link を作る方法について。
【JWT】デコード時に発生したエラー Unable to decode the payload の解決方法
https://zenn.dev/o0rororo0o/articles/028202490cc99d
Microsoft.AspNetCore.Authentication.JwtBearer 7.0.14 以降で JWT の iat フィールドが数値以外となっているとエラーになることについて。
Optimizing String Searches in C# with SearchValues
https://dev.to/admirmujkic/optimizing-string-searches-in-c-with-searchvalues-1105
.NET 8 で追加された特定の値が含まれていることを検索することに特化した定義が可能な SearchValues
クラスの使い方とパフォーマンスについて。
The First Set of Bug Fixes for ReSharper and Rider 2024.1 Are Here! | The .NET Tools Blog
ReSharper と Rider 2024.1.1 がリリースされた。
このリリースは ReSharper と Rider 2024.1 の最初のバグフィックスで、いくつかの細かい不具合が修正されている。
itsmattkc/dotnet9x: Backport of .NET 2.0 - 3.5 to Windows 9x
https://github.com/itsmattkc/dotnet9x
.NET Framework 2.0-3.5 を Windows 9x にバックポート(移植)を試みるプロジェクト。
-【やじうまPC Watch】 .NET FrameworkをWindows 95にバックポートした強者現る
Will Visual Studio Be Migrated to .NET Core and Become Multi-Platform? - NDepend Blog
https://blog.ndepend.com/visual-studio-multi-platform/
Visual Studio は .NET CoreCLR 化するのかということを考えるべく、現状の Visual Studio のアセンブリの構成を調査し推察している。
イベント
C#パフォーマンス勉強会 (2024/04/27 13:30〜)
https://cs-reading.connpass.com/event/309714/
イマドキのC# .NET Web開発 〜gRPC, GraphQL, Blazorもあるよ〜 (2024/05/15 19:00〜)
https://sansan.connpass.com/event/316664/
ライブラリ、リポジトリ、ツールなど
Cysharp/KcpTransport: KcpTransport is a Pure C# implementation of RUDP for high-performance real-time network communication
https://github.com/Cysharp/KcpTransport
KCP(UDP ベースの RUDP 的なプロトコル) の .NET 移植実装。
サイト、ドキュメントなど
ツイート
ローカル関数がコンパイルされて IL になった際、g_
で始まる名前のメソッドになるが、その g_
について。
fun fact: if you've ever decompiled a local function in C#, you might have noticed a "g" in the mangled name. I chose that letter!
— Ashley (@khyperia) April 23, 2024
My logic was that in math, functions are typically called "f" first, then "g" second - local functions are kinda the second function, so g it is! pic.twitter.com/0sSq9u8Vg3
IList<T>
が IReadOnlyList<T>
になるかもしれないという話。
For .NET 9 P4, we're trying to make the long desired change that all the mutable collection interfaces extend the IReadOnly interfaces, so this code becomes valid: pic.twitter.com/tPf10vLf2m
— Immo Landwerth (@terrajobst) April 24, 2024
Deep Dive
List Add is way slower (almost 3 times) in net9.0 preview 3
than with net8.0
· Issue #101437 · dotnet/runtime
https://github.com/dotnet/runtime/issues/101437
JIT の変更により .NET 9 の List が遅くなることがある問題について。現状 Apple Silicon (Arm64) でのみ発生している。
This is an example of a great investigation an engineering discussion https://t.co/crFlo1Xnwc#dotnet
— David Fowler (@davidfowl) April 24, 2024