2022-02-19: .NET 20th Anniversary, .NET 7 Preview 1, Visual Studio 2022 17.1

Published on Saturday, 19 February 2022

トピックス

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 へ向かっていくといった話。

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 2022 version 17.2 Preview 1

https://docs.microsoft.com/en-us/visualstudio/releases/2022/release-notes-preview#1720-pre10--visual-studio-2022-version-172-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-windowsnet6.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 モード対応など。

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# 向けの変更として AsyncUnaryCallAsyncClientStreamingCallConfigureAwait をサポートするようになった。

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

.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

https://blog.unity.com/ja/technology/feature-highlight-il2cpp-runtime-performance-improvements-in-unity-20212

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

https://devblogs.microsoft.com/visualstudio/typing-less-coding-more-how-we-delivered-intellicode-whole-line-completions-with-a-transformer-model/

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 のプライベートなパッケージレジストリーをホストするサービスで、有料プランではライセンスコンプライアンスやポリシーを定義できる。

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

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

ツイート

IHostedService で例外が発生した場合にデフォルトではアプリケーション(のホスト)が停止するが、HostOption.BackgroundServiceExceptionBehavior の設定で無視できるという Tips。

List<T> に要素が追加されて内部がリサイズされるときの様子を図にしたもの。

FluentAssertions には特定のアセンブリーを参照していないことを確認する NotReference というものがある。

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

.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 などの脆弱性緩和の影響でパフォーマンス低下が引き起こされていたとのこと。