トピックス
Announcing .NET 7 Preview 3 - .NET Blog
https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-preview-3/
.NET 7 Preview 3 がリリースされた。
Preview 3 では次のような変更が含まれている。
- NativeAOT の改善
- Observability: アクティビティートレースの状態をサンプラーで変更可能に
- System.Composition.Hosting の API 改善
- Write-Xor-Execute を有効にすることによる起動時間の短縮
- コード生成 (JIT)
- GC リージョンのデフォルト有効化
- X500DistinguishedName の堅牢な生成 API
なお、Visual Studio 2022 17.2 Preview 3 での動作がテストされているため、使用にはプレビューチャンネルのインストールが推奨される。Visual Studio for Mac での対応は後日となるとのこと。
ASP.NET Core updates in .NET 7 Preview 3 - .NET Blog
https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-3/
.NET 7 Preview 3 での ASP.NET Core のアップデートについての記事。
- Minimal API でのルートハンドラーに対するフィルターやテスタビリティの向上
- MVC と API のコントローラーでの
TryParse
による値のバインドのサポート Results.Stream
のオーバーロード- HTTP/2 での一つのコネクションに対する複数のストリームがある場合のパフォーマンス向上
- スタートアップ時間計測に使用できる
ServerReady
イベント - 開発時例外ページのダークモード対応
Announcing Entity Framework Core 7 (EF7) Preview 3 - .NET Blog
https://devblogs.microsoft.com/dotnet/announcing-entity-framework-7-preview-3/
Entify Framework Core 7 Preview 3 がリリースされた。
Preview 3 での改善点として次のものを紹介している。
- SQL Server の INSERT のロジックの改善
- UPDATE/DELETE での RETURNING/OUTPUT 句の使用
- ReaderModificationCommandBatch のリファクタリング
- 事前チェックとしての MaxBatchSize の再実装
その他、記事では T4 テンプレートを使用したデータベースリバースエンジニアリング/スキャフォールディングについても触れている。
.NET MAUI Release Candidate - Ready for cross-platform app development - .NET Blog
https://devblogs.microsoft.com/dotnet/dotnet-maui-rc-1/
MAUI の RC1 がリリースされた。
このリリースから "go live" サポートポリシーが適用され、実運用プロダクトでの使用であっても Microsoft のサポートを受けられるようになる。
現時点で MAUI の RC1 を使用しての開発には Visual Studio 2022 17.2 Preview 3 が必要となる。Mac 上で開発するにはコマンドラインからインストールするか、今後の Visual Studio for Mac の Preview リリースを待つ必要がある。
記事では MAUI に含まれるコントロールやテンプレートについて、コントロールのカスタマイズについても触れている。
.NET April 2022 Updates – .NET 6.0.4, .NET 5.0.16 and, .NET 3.1.24 - .NET Blog
https://devblogs.microsoft.com/dotnet/net-april-2022-updates-net-6-0-4-net-5-0-16-and-net-3-1-24/
.NET の2022年4月更新で .NET 6.0.4, .NET 5.0.16, .NET 3.1.24 がリリースされた。
セキュリティーの修正はなく、小さな改善や不具合の修正が含まれている。
また、今回のリリースからサーバーオペレーティングシステム (Windows Server) での Microsoft Update 経由での .NET の更新が可能になった。この機能はオプトインとなるためデフォルトでは自動更新されない。
.NET Framework April 2022 Security and Quality Rollup Updates
https://devblogs.microsoft.com/dotnet/dotnet-framework-april-2022-updates/
.NET Framework の2022年4月セキュリティーと品質累積アップデートがリリースされた。
サービス拒否 (DoS) に関するセキュリティー修正といくつかの品質向上とバグ修正が含まれている。
Announcing .NET Community Toolkit v8.0.0 Preview 3 - #ifdef Windows
https://devblogs.microsoft.com/ifdef-windows/announcing-net-community-toolkit-v8-0-0-preview-3/
.NET Community Toolkit v8.0.0 Preview 3 がリリースされた。
- MVVM Toolkit の Source Generator
- ObservableProperty の partial メソッドによる実装
- コマンド取り消しのサポート
- 生成されたプロパティーの変更通知のブロードキャスト
- 診断機能の改善
- グループ化されたオブザーバブルコレクションの改良
Visual Studio 2022 for Mac Preview 9 - Visual Studio Blog
https://devblogs.microsoft.com/visualstudio/visual-studio-2022-for-mac-preview-9/
Visual Studio 2022 for Mac Preview 9 がリリースされた。
引き続き正式版に向けて問題の修正を中心に更新が行われている。
Introducing Central Package Management
https://devblogs.microsoft.com/nuget/introducing-central-package-management/
NuGet の新機能である一元的なパッケージ管理機能についての記事。
一元的なパッケージ管理機能が Visual Studio 2022 17.2, .NET SDK 6.0.300, NuGet 6.2.0 以降で使用できるようになった。
この機能は Directory.Packages.props
というファイルに使用する NuGet パッケージのバージョンを記述しておき、各プロジェクトから参照する場合にはパッケージ名のみを指定することでバージョンを一元的に管理できるといった仕組み。
<!-- Directory.Packages.props -->
<Project>
<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project>
<!-- ClassLibrary1.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
</Project>
記事では設定の仕方のほか、推移的パッケージのピン止め、パッケージバージョンの上書き、一元的なパッケージ管理機能の無効化などを説明している。
Unity 2021 Long Term Support for programmers | Unity
https://unity.com/releases/2021-lts/programming
Unity 2021.3 LTS がリリースされた。
C# 8 と .NET Standard 2.1 のサポートが追加され、IL2CPP のパフォーマンスも改善されている。
なお Unity の .NET Framework 4.8 プロファイルは .NET Standard 2.1 を包含するものとなり、純正の .NET Framework 4.8 とは異なる点に注意が必要(Microsoft の .NET Framework 4.8 は .NET Standard 2.1 をサポートしない)。
Cake v2.2.0 released
https://cakebuildnet.medium.com/cake-v2-2-0-released-74aa5e47f618
Cake 2.2.0 がリリースされた。
オプトインのスクリプトキャッシュ機能の追加のほか、いくつかのバグ修正や改善が行われている。
Breaking Change: Revert the Console Formatter Default in .NET 6 Container Images · Issue #216 · dotnet/announcements
https://github.com/dotnet/announcements/issues/216
.NET 6 ではコンテナーイメージ内で実行時にコンソールのロガーはデフォルトで JSON フォーマットで出力するようになっていたが、5月のサービス更新で元に戻す (通常の未指定時と同様のテキスト形式) というアナウンス。
Logging__Console__FormatterName
環境変数が Json
となっていたものが未設定となるため、今後この挙動を維持したい場合には Logging__Console__FormatterName
に Json
を明示的に指定する必要がある。
C# 11 Preview Updates - Raw string literals, UTF-8 and more!
https://devblogs.microsoft.com/dotnet/csharp-11-preview-updates/
C# 11 Preview についての記事。
C# 11 で導入される予定の機能を紹介している。Raw string literals など一部の機能は既に Visual Studio 2022 17.2 Preview 3 または .NET 7 Preview 3 以降で使用できるが、それ以降を予定しているものも多いので注意。対応状況はLanguage Feature Statusを参照のこと。
- Raw string literals
- いわゆるヒアドキュメント的な文字列を埋め込む記法
- UTF-8 文字列リテラル
byte[]
やSpan<byte>
といった型へ文字列を代入する形で UTF-8 バイト列となる記法
checked
ユーザー定義演算子- 算術オーバー/アンダーフローの取り扱いが可能になる
- 構造体の自動デフォルト
Span
のパターンマッチング- メソッドグループ変換でキャッシュされたデリゲートを使用
- パラメータ null チェックの削除
!!
でパラメータに null がセットされていることをチェックして例外を投げる記法を一旦取り下げ
- 小文字の型名に関する警告
- C# ではキーワードに小文字を使用しているため、破壊的変更を防ぐために小文字の型名に対して警告する
- Warning on lower case type names in C# 11
ReSharper 2022.1 Release Candidate is out
https://www.jetbrains.com/resharper/nextversion/
ReSharper 2022.1 Release Candidate がリリースされた。
このリリースではコード解析に関する改善や ASP.NET Core 6 の Minimal API のエンドポイント対応、Visual Studio 内でのデコンパイラーでのメタデータツリービューの追加、その他不具合の修正などが行われている。
ReSharper 2022.1 Release Candidate is out. Check out the list of updates and try it for yourself:https://t.co/uVUkfoYllI pic.twitter.com/4n1dfRjJCc
— JetBrains ReSharper (@resharper) April 13, 2022
アーティクル、スライドなど
Using .NET To Validate JSON with JSON Schema
https://khalidabuhakmeh.com/using-dotnet-to-validate-json-with-json-schema
JsonSchema.NET と System.Text.Json で JSON Schema による JSON の検証を行う方法についての記事。
Supercharge your Git experience in VS
https://devblogs.microsoft.com/visualstudio/supercharge-your-git-experience-in-vs/
Visual Studio 2022 17.2 Preview 3 以降で導入されたコミットグラフ機能を有効にすることで Git の操作を高速化できることについての記事。
Streaming IAsyncEnumerable to RxJs front-end
https://medium.com/@markotny97/streaming-iasyncenumerable-to-rxjs-front-end-8eb5323ca282
IAsyncEnumerable
による API からのストリーミングと、フロントエンドで RxJS を使用した処理についての記事。
Mono.Cecilを用いて2つのDLLの間の型の差分を出す | Yucchiy's Note
https://blog.yucchiy.com/2022/04/mono-cecil-class-diff/
Mono.Cecil を使用して2つのアセンブリに含まれている型の差分を取得する方法についての記事。
How segments and regions differ in decommitting memory in the .NET 7 GC
.NET 7 で導入される GC のリージョンがセグメントからメモリーをデコミットする挙動についての記事。
Keeping up with .NET: learning about new features and APIs
https://andrewlock.net/keeping-up-with-dotnet-learning-about-new-features-and-apis/
.NET の新しい機能や API を学ぶのに役立つリソースの紹介記事。
Hybrid App Development With BlazorWebView — Blazor Lipstick For The Desktop Pig
MAUI で WebView を使用する Blazor (Blazor Hybrid) アプリについての記事。
メール検証も!ASP.NET Core MVCに認証機能Identityを実装する - Qiita
https://qiita.com/YouKnow/items/f1b1946509dba07be439
ASP.NET Core MVC と ASP.NET Core Identity、SendGrid を使用してメール確認付き認証を実装するという記事。
配列のアクセス方法による速さの違い - Qiita
https://qiita.com/Hotari/items/9a69c4e02015c02d05ef
配列に対するアクセス方法(インデックスの指定やポインター)による速度の違いについての記事。
コメントでメモリーのアドレッシングが異なることで結果が変わってきているのではないかといったことも触れられている。
.NET6 単一ファイル時の実行パス取得について - Qiita
https://qiita.com/MinadukiSekina/items/59eb7e67018037092fc6
PublishSingleFile で単一実行ファイルとして生成したときに Assembly.Location を使用できない制限についての記事。
C#でMonacoEditor - Qiita
https://qiita.com/Yuki4/items/48c242c7795b43c2f34a
WPF アプリケーションで Monaco Editor (Visual Studio Code のエディター部分) を埋め込んで使用する方法についての記事。
Google Colaboratoryで.NET6.0を使う - Qiita
https://qiita.com/karuakun/items/14ffc4f8420e2a868241
Google Colaboratory で .NET Interactive をインストールすることで .NET 6 を使用するという方法についての記事。
ライブラリ、リポジトリ、ツールなど
サイト、ドキュメントなど
ツイート
In the early days of .NET Core, it was very difficult to get internal teams at Microsoft to deploy it to production. It was too new and people didn't know if it was "real" (this skepticism existed externally as well). #dotnet
— David Fowler 🇧🇧🇺🇸 (@davidfowl) April 15, 2022
.NET Core を Microsoft の内部チームで運用環境に展開した話のスレッド。機械翻訳でざっくりと…。
- .NET Core が出た初期のころはあまりに新しすぎて「リアル」だと思われていなかった (外部からも)
- そこで社内の利用者向けに小さな移行チームを立て問題を乗り越えたが、ギャップは多かった
- .NET Framework への沢山の内部依存があった(今もある)。エコシステムを立ち上げるのは困難で .NET Core への移植の手助けをする必要があった。そして多くのチームは .NET Core に移植されていない NuGet パッケージにも依存していた
- そのようにしてギャップを埋めていくと関心が集まってきて、Bing のようなアーリーアダプターが現れ、パフォーマンス向上を広めるの一役買った。最初の利用者を獲得するのは難しく、ほとんどのユーザーは枯れたものを使いたがる
- 新しい API や Span といった作業をする前であっても、社内のチームは .NET Core に移行することでパフォーマンス向上やコスト削減できているという話が広まった
- Microservices やコンテナー、Kubernetes でモダナイゼーションを行っているチームもあったのでパフォーマンスではなくモダナイゼーションの一部として採用される例もあった
- .NET Core 3.1 以降、多くのチームが採用してパフォーマンス向上が続き、移行により 5-30% の改善が見られた (CPU, メモリー、スループット、レイテンシー)。さらに多くのチームが移行の手助けを望んだ
- その頃には移行を経験したチームも揃い、事例も多くなってきたので移行に関する話が簡単になってきた。内部向けに .NET Core への移行コミュニティーを作った
- 今では移行したいチームが多すぎて手が回らないし、今でも .NET Core への移行とモダナイゼーションによってパフォーマンスが向上したというメールを受け取る
- 前年の影響が表れるには数年かかることもあるので楽しみながら .NET を使おう
Unwinding a stack is actually a fundamental piece of stack & codegen cooperation to allow to recover at runtime a callstack, or chained exception handlers...etc. At any instruction point in a function, the callstack crawler needs to recover the chain of calls pic.twitter.com/Z5XfuFLNEy
— Alexandre Mutel (@xoofx) April 14, 2022
スタックフレームの巻き戻しについての図解。
Deep Dive
Add MemoryExtensions.CommonPrefixLength by stephentoub · Pull Request #67929 · dotnet/runtime
https://github.com/dotnet/runtime/pull/67929
二つの Span
などを比較して先頭の同じ要素の数を返す MemoryExtensions.CommonPrefixLength
API を追加する PR。
Support built-in unsigned right shift operators. by AlekseyTs · Pull Request #60560 · dotnet/roslyn
https://github.com/dotnet/roslyn/pull/60560
符号なし右シフト演算子 (>>>
) のサポートを追加する PR。
Introduce IBindableFromHttpContext<TSelf> by DamianEdwards · Pull Request #41100 · dotnet/aspnetcore
https://github.com/dotnet/aspnetcore/pull/41100
static abstract を利用して、Minimal API などでカスタムバインダーを見つけ・使用しやすくするという PR。
HTTP/2 output processing make over by davidfowl · Pull Request #40925 · dotnet/aspnetcore
https://github.com/dotnet/aspnetcore/pull/40925
HTTP/2 の出力処理にロックの代わりにキューを使用することでパフォーマンスを向上させるという PR。
Use "..."u8 in dotnet/runtime by stephentoub · Pull Request #67733 · dotnet/runtime
https://github.com/dotnet/runtime/pull/67733
Encoding.UTF8.GetBytes
を u8
サフィックスを持つ UTF-8 文字列に置き換えるという PR (ドラフト)。
Initial .NET Framework ARM64 support by jaredpar · Pull Request #60735 · dotnet/roslyn
https://github.com/dotnet/roslyn/pull/60735
Roslyn で ARM64 の .NET Framework のバイナリの生成をサポートするという PR。(親 Issue によると PDB のサポートの都合もありそう)
Implement Tar APIs by carlossanlop · Pull Request #67883 · dotnet/runtime
https://github.com/dotnet/runtime/pull/67883
tar アーカイブ形式のサポートを追加する PR。System.Formats.Tar
名前空間になる模様。