トピックス
Happy 20th Anniversary, .NET! - .NET Blog
https://devblogs.microsoft.com/dotnet/happy-20th-anniversary-net/
.NET (Visual Studio .NET) のリリースから20周年を迎えたことについての記事。
2002年2月13日に Visual Studio .NET が正式にリリースされ、それから20年の間にコミュニティーによって支えられ、オープンソース化などを経て、これから .NET 7 へ向かっていくといった話。
- .NET 20th Anniversary - YouTube
- GitHub - dotnet-presentations/dotNET20th: .NET 20th Anniversary creative and digital swag
- Happy Birthday!.NET、20 歳になりましたよ。君だけの dotnet-bot くんを作ろうぜ!#dotNETLovesMe - Qiita
- .NET 20th anniversary | ブチザッキ
Announcing .NET 7 Preview 1 - .NET Blog
https://devblogs.microsoft.com/dotnet/announcing-net-7-preview-1/
.NET 7 Preview 1 がリリースされた。
.NET 7 Preview 1 では Microsoft.Extensions.* ライブラリーの Null 許容参照型の対応の拡充や JIT コンパイラーの最適化、Activity や System.Text.Json などの API の更新、ホットリロードの改善などが含まれている。
このプレビューは Visual Studio 2022 17.2 Preview 1 でテストされているため、試用には Preview Channel が推奨されている。また、Visual Studio for Mac でのサポートは近日中となるとのこと。
.NET 7 での破壊的な変更についてのドキュメントも公開されている。
ASP.NET Core updates in .NET 7 Preview 1 - .NET Blog
https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-net-7-preview-1/
.NET 7 Preview 1 における ASP.NET Core の更新についての記事。
.NET 7 では次のエリアの強化にフォーカスしているとのこと。
- パフォーマンス: 更なる速度と効率の向上
- HTTP/3: 機能の実装完了とデフォルトで有効化
- Minimal API: エンドポイントフィルターやルートグルーピング、認証認可のサポートなど
- gRPC: gRPC JSON トランスコーディング
- SignalR: 型付きクライアントの生成、クライアント呼び出しからの結果の受け取り
- Razor: コンパイラーの改善によるパフォーマンス向上やツーリングの向上
- Blazor: MAUI, WPF, Windows Forms 向けの Blazor Hybrid サポートの後、mixed-mode AOT, マルチスレッディング, WebCrypto など多くの強化
- MVC: エンドポイントルーティング、リンク生成、パラメータバインディングの改善
- Orleans: .NET 7 に合わせた Orleans 4 のリリース。シンプルさ、保守性、パフォーマンスに焦点を当てた改善
.NET 7 Preview 1 では次のような改善が含まれている。
- Minimal API 改善
- SignalR クライアント Source Generator
- MVC のビューと Razor Pages での nullable モデルのサポート
- バリデーションエラーでの JSON プロパティ名の使用
dotnet weatch
のコンソール出力の改善- 大きな修正時に常に再起動する
dotnet watch
の設定 - ValidationAttribute での Dependency Injection
- ヘッダーの読み書きの高速化
- gRPC JSON トランスコーディング
Announcing Entity Framework 7 Preview 1 - .NET Blog
https://devblogs.microsoft.com/dotnet/announcing-entity-framework-7-preview-1/
Entity Framework 7 Preview 1 がリリースされた。
Entity Framework 7 は現在 .NET 6 をターゲットとしているが、.NET 7 のリリースが近づいた時には .NET 7 へとアップグレードされる。また、.NET Framework への対応は行われない。
Announcing .NET MAUI Preview 13 - .NET Blog
https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-13/
MAUI Preview 13 がリリースされた。
このリリースでは品質向上や Label.FormattedText のようないくつかの新しい実装が含まれている。
そのほかアプリケーションの起動時間を短縮するため、Microsoft.Extensions.Hosting の依存の削除が行われている。アプリケーションの起動のためのコードは引き続きビルダーパターンを使用でき、記事では構成についてや DI について触れている。
このリリースは Visual Studio 17.2 Preview 1 に含まれているため、試用には Preview Channel のインストールが必要。
Visual Studio 2022 17.1 is now available! - Visual Studio Blog
https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-1-is-now-available/
Visual Studio 2022 version 17.1 がリリースされた。
ファイルのインデックス作成による検索速度の向上(プレビュー機能)、フォーカスを失ったときに自動保存する機能が実装された。Git 関連の機能も強化され、ブランチ間の差分表示やデタッチされた HEAD のチェックアウトなどに対応している。
そのほかソリューションフィルター使用時にプロジェクトの依存を確認してまとめて更新できるようになった。
17.1 がリリースされたことで Professional/Enterprise のユーザーは 17.0 を LTSC として構成することで2023年7月までセキュリティー修正のサポートを受けられる。Community Edition のユーザーは Current Channel のみとなる。
- Visual Studio の製品ライフサイクルとサービス | Microsoft Docs
- Visual Studio 2022 version 17.1 Release Notes | Microsoft Docs
Visual Studio 2022 version 17.2 Preview 1
Visual Studio 2022 version 17.2 Preview 1 がリリースされた。
C# 11 の Raw String リテラルの対応や StringSyntaxAttribute
への対応など。そのほか Git の行ステージングの対応など。
Visual Studio 2022 for Mac Preview 6 - Visual Studio Blog
https://devblogs.microsoft.com/visualstudio/visual-studio-2022-for-mac-preview-6/
Visual Studio 2022 for Mac Preview 6 がリリースされた。
このリリースではクラッシュなどの問題が多く修正されているほか、環境設定画面などの UI がネイティブ UI へと移植されている。
.NET Framework February 2022 Cumulative Update Preview - .NET Blog
https://devblogs.microsoft.com/dotnet/net-framework-february-2022-cumulative-update-preview/
.NET Framework の2022年2月の累積アップデートのプレビューがリリースされた。
このアップデートではセキュリティー修正は含まれず、品質と安定性の向上のための修正が含まれている。
- TLS 1.3 でネゴシエーションする際にクライアント証明書を使用するとハングする問題の修正
- .NET Framework 4.8 で導入された IRawElementProviderSimple のメモリーリークの修正。AppSwitch でオプトインする必要がある
Introducing Compatible Packages on NuGet.org - The NuGet Blog
https://devblogs.microsoft.com/nuget/introducing-compatible-frameworks-on-nuget-org/
NuGet.org のパッケージ詳細ページで改善されたターゲットフレームワーク関連の表示についての記事。
パッケージ詳細ページに新たにパッケージがサポートしている最小のターゲットフレームワークのバッジが表示されるようになり、対応しているフレームワークが一目でわかるようになった。
例えばパッケージのターゲットフレームワークとして net6.0
, net5.0
, netstandard2.1
, netstandard2.0
が指定されている場合、.NET ファミリーでは最小が .NET 5.0
、.NET Standard ファミリーでは最小が .NET Standard 2.0
となり、それらがバッジとして表示される。
また Frameworks タブではそのターゲットフレームワークから導かれる、実際に対応しているフレームワークの一覧を確認できるようになっている。これは例えば net6.0
がターゲットであれば net6.0
だけでなく net6.0-windows
や net6.0-ios
なども対象となる。
記事では .NET Framework, .NET Core, Xamarin, .NET Standard, .NET の違いやターゲットフレームワークについても触れている。
ReSharper and Rider 2022.1 EAP 3
ReSharper と Rider の 2022.1 EAP 3 がリリースされた。
ReSharper は型のファイルへの移動の向上や Source Generator 使用時のパフォーマンスの向上、Rider は Visual Studio 2022 キーバインドの追加や Docker fast モード対応など。
ReSharper 2022.1 EAP3 has landed with better Move to file, faster work with source generators, disabling dotCover for certain lines of code, keyboard navigation in dotTrace Home, and more. Check out our website for details and download: https://t.co/dcxG4qkrri pic.twitter.com/pXuJ9cEhq3
— JetBrains ReSharper (@resharper) February 17, 2022
Rider 2022.1 EAP3 is now available with new keymaps, Docker fast mode, and adding web references in .NET Core projects. Learn more at https://t.co/l7wKSJLun6 pic.twitter.com/zUQY3fZjlR
— JetBrains Rider (@JetBrainsRider) February 17, 2022
Release Release v1.44.0 · grpc/grpc
https://github.com/grpc/grpc/releases/tag/v1.44.0
gRPC 1.44.0 (NuGet パッケージバージョン 2.44.0) がリリースされた。
C# 向けの変更として AsyncUnaryCall
と AsyncClientStreamingCall
で ConfigureAwait
をサポートするようになった。
アーティクル、スライドなど
.NET 7 WebAssembly Plans: Mixed-Mode AOT, Multi-Threading, Web Crypto -- Visual Studio Magazine
https://visualstudiomagazine.com/articles/2022/02/18/net-7-webassembly.aspx
.NET 7 の WebAssembly (Blazor) の対応予定についてまとめている記事。
機能ハイライト:Unity 2021.2 における IL2CPP ランタイムのパフォーマンス改善 | Unity Blog
Unity 2021.2 での IL2CPP ランタイム (AOT 実行)でのパフォーマンス改善について紹介している記事。
デリゲートの呼び出し、不必要なボックス化のチェック、ジェネリック仮想メソッドの呼び出し、 Enum.HasFlag、制約された呼び出しといった部分の改善について紹介している。
.NET Beyond | VMWare Tanzu Developer Center
https://tanzu.vmware.com/developer/tv/dotnet-beyond
VMWare による .NET に関するオンラインイベント。
【C# 11 候補】 引数の null チェック
https://ufcpp.net/blog/2022/2/parameter-null-check/
C# 11 で導入予定のパラメーターの null チェックについての記事。
Cache Aside Pattern using C# | Adnan Rafiq's Blog, Memories and Opinions
https://adnanrafiq.com/blog/cache-aside-pattern-csharp/
Microsoft.Extensions.Caching と Redis でキャッシュを扱う手法についての記事。
Why making Umbraco headless makes sense
https://dev.to/nikcio/why-making-umbraco-headless-makes-sense-2acd
Umbraco CMS を GraphQL ベースの Headless CMS として使う方法についての記事。
.NET and C# Versions - 20th Anniversary ♥
https://nietras.com/2022/02/13/dotnet-and-csharp-versions/
.NET と C# の20年の間に導入された機能などを一枚の画像にまとめたもの。
MicrosoftがYARPをリリース - もう一つのリバースプロキシ
https://www.infoq.com/jp/news/2022/02/microsoft-releases-yarp/
Microsoft が開発したリバースプロキシーのためのライブラリー YARP についての記事。
C#製の静的サイトジェネレータ「Statiq」でブログを書く - Qiita
https://qiita.com/yamaccu/items/6ea0e09954bec8474a19
C# で書かれた静的サイトジェネレーターの Statiq でブログを書くための使い方を紹介している記事。(ちなみに WeekRef.NET も Statiq で生成しています)
イベントを await で受け取る
https://zenn.dev/zuishin/articles/2022-02-15-01
イベントハンドラーによるイベントを await
できるように変換するという方法についての記事。
Waiting for your ASP.NET Core app to be ready from an IHostedService in .NET 6
https://andrewlock.net/finding-the-urls-of-an-aspnetcore-app-from-a-hosted-service-in-dotnet-6/
.NET 6 の IHostedService
のコードから ASP.NET Core アプリケーションが起動するのを待機する方法についての記事。
ASP.NET Core がリッスンしているアドレスを取得したいといった場合は Kestrel (ASP.NET Core) の起動が完了を待つ必要があるため、IHostApplicationLifetime
を使用する。
How to write your own discord bot on .NET 6
https://medium.com/medialesson/how-to-write-your-own-discord-bot-on-net-6-ac96e40467b8
Discord.Net を試用して Discord のボットを実装する方法についての記事。
.NET 6.0とAlpineのバージョンアップで遭遇した問題二つ - Qiita
https://qiita.com/karuakun/items/ac6cfd5e0bc52ce5bea6
.NET Core 3.1 から .NET 6 と Docker イメージの Alpine のバージョンを上げた際に発生した問題についての記事。
一つは OS と Aurora での TLS のバージョンの問題、もう一つは Async MySQL Connector のバージョンが上がったことでの Aurora との相性問題。
C# 中の埋め込み言語 | ++C++; // 未確認飛行 C ブログ
https://ufcpp.net/blog/2022/2/embedded-languages
現在実装が進んでいる C# のコード内に JSON や正規表現のような別な言語を埋め込む場合のシンタックスハイライトに関する機能についての記事。
Typing Less, Coding More: How we delivered IntelliCode whole line completions with a transformer model - Visual Studio Blog
Visual Studio の IntelliCode (学習ベースのコード補完) の技術的な解説記事。
Host your .NET packages with a private NuGet feed
https://bytesafe.dev/posts/secure-dotnet-package-dependencies-with-private-nuget-feeds/
Bytesafe を使用して、プライベートな NuGet フィードでパッケージをホストする方法についての記事。
Bytesafe は NuGet や npm, Maven のプライベートなパッケージレジストリーをホストするサービスで、有料プランではライセンスコンプライアンスやポリシーを定義できる。
ライブラリ、リポジトリ、ツールなど
サイト、ドキュメントなど
ツイート
.NET Hosted Services are available to use in https://t.co/QC5rnmJRtI Host & share the same process
— adnan (@madnan_rafiq) February 14, 2022
IT enables features like in-memory long-running tasks and accessing main process memory
Handle exception in your Hosted Service, or change the default so the server does not stop. pic.twitter.com/f3Qye1ZfuZ
IHostedService
で例外が発生した場合にデフォルトではアプリケーション(のホスト)が停止するが、HostOption.BackgroundServiceExceptionBehavior
の設定で無視できるという Tips。
And what about resizing the List< T >? We've got you covered, or more precisely .NET in Pictures does 😎
— Dotnetos (@dotnetosorg) February 17, 2022
Expect more tomorrow!#dotnet #collections #list #dotnetInPictures pic.twitter.com/hcKcOMzfIq
List<T>
に要素が追加されて内部がリサイズされるときの様子を図にしたもの。
You can use Fluent Assertions #dotnet to assert that no one introduces unwanted dependencies.
— Guilherme Ferreira (@gsferreira) February 15, 2022
See how 👇
Extremely useful since .NET References are transitive.
It's the kind of change that often goes unseen in a PR review. pic.twitter.com/f3lvBkUdAM
FluentAssertions には特定のアセンブリーを参照していないことを確認する NotReference
というものがある。
System.Threading.RateLimitingに関して調べた事あれこれ。rcか正式版リリースになったら記事にするかなー。
— skitoy4321 (@skitoy4321) February 18, 2022
ConcurrencyとSemaphoreが違うのは待つときに重み?のようなものを付けられることらしい。https://t.co/6ra3TkFPdp
System.Threading.RateLimiting
について調べたメモ。
Deep Dive
Add support for Windows IO completions to the portable thread pool by kouvel · Pull Request #64834 · dotnet/runtime
https://github.com/dotnet/runtime/pull/64834
Portable ThreadPool に Winfows の IOCP サポートを追加するという PR。
Add Nullable.GetValueRefOrDefaultRef API by Sergio0694 · Pull Request #64677 · dotnet/runtime
https://github.com/dotnet/runtime/pull/64677
Nullable<T>
の値をコピーせず取得するための Nullable.GetValueRefOrDefaultRef
を追加する PR。
Add Request Decompression middleware by david-acker · Pull Request #40279 · dotnet/aspnetcore
https://github.com/dotnet/aspnetcore/pull/40279
ASP.NET Core にリクエストの圧縮を展開するミドルウェアを追加するという PR。
API-diff between 6.0 and 7.0-preview1 by carlossanlop · Pull Request #7211 · dotnet/core
https://github.com/dotnet/core/pull/7211
If you're interested in the API diff between .NET 6 and .NET 7 Preview 1: https://t.co/PrIvLdaKdC
— Tanner Gooding (@tannergooding) February 18, 2022
.NET 6 と .NET 7 Preview 1 の間の API の差分についての PR とツイートでいくつか紹介している。
All TE benchmarks regressed on ARM64 · Issue #65272 · dotnet/runtime
https://github.com/dotnet/runtime/issues/65272
ARM64 の TechEmpower ベンチマークでパフォーマンス低下が起こっているという Issue。
実際のところは ARM64 だけでなく Intel でもパフォーマンス低下しており、原因はクライアントとなる Linux マシンのカーネルを 4.15.0 から 5.16.9 へ更新したことで Spectre などの脆弱性緩和の影響でパフォーマンス低下が引き起こされていたとのこと。