トピックス
Visual Studio 17.1 Preview 2 is now available!
https://devblogs.microsoft.com/visualstudio/visual-studio-17-1-preview-2-is-now-available/
Visual Studio 17.1 Preview 2 がリリースされた。
記事では Preview 2 で導入された以下の新機能について紹介している。
- Git 関連の機能の向上
- ブランチ間の比較
- デタッチした HEAD チェックアウト
- マルチリポジトリーサポートの向上
- 行単位のステージング
- コードの保存時自動クリーンナップ
- ファイルの自動保存
- Visual Studio がフォーカスを失ったときに自動で保存する
- .NET 関連の生産性向上
- 「定義に移動」で埋め込みソースまたはソースリンクのソースコード参照
- スタックトレースエクスプローラー
- EditorConfig の設定 UI に名前付けに関連する項目を追加
- C++ 関連の生産性向上
- マイクロコントローラーと RTOS のペリフェラルレジスターの確認と操作を可能にするビューの追加
- macOS 上での開発サポートの向上
- Linux と同様のリモートデバッグ関連の機能
- タブの色設定
- プロジェクトや拡張子によっての設定
- コンテキストメニューからの変更
Git 関連の機能の向上については別記事にて詳しく説明されているのでそちらも参照のこと。
- Introducing new Git features to Visual Studio 2022
- Summary of What's New in this Release of Visual Studio 2022 version 17.1 Preview 2 | Visual Studio 2022 Preview Release Notes | Microsoft Docs
Announcing .NET MAUI Preview 11
https://devblogs.microsoft.com/dotnet/announcing-dotnet-maui-preview-11/
.NET MAUI Preview 11 がリリースされた。
Preview 11 では Windows のコントロールに対する Fluent Design System のスタイルの適用、複数ウィンドウのサポート、ImplicitUsings を使用した新しい C# テンプレート、iOS, tvOS, macOS におけるネイティブ型の扱いの修正といったものが含まれている。
iOS, tvOS, macOS におけるネイティブ型に関しては Xamarin が独自で提供していた System.nint
, System.nuint
を .NET 6 で削除したという Breaking Changes がある。
Release Notes 2.0 - Pinta
https://www.pinta-project.com/releases/2-0
Pinta 2.0 がリリースされた。
Pinta はオープンソース、Linux, macOS, Windows, *BSD といったプラットフォームで動作するクロスプラットフォームのペイントソフト。
Pinta 2.0 では GTK3 と .NET 6 への移行が行われた。これにより外観に関する変更や高 DPI のサポートの向上、Windows と macOS でのランタイムが不要となるといった恩恵を受けられるようになった。
Amazon.Lambda.Annotations
https://www.nuget.org/packages/Amazon.Lambda.Annotations
Amazon.Lambda.Annotations のプレビューパッケージが公開された。
従来 Lambda 関数を実装するには Lambda 固有の API を使用したプログラミングモデルを必要としていたが、このパッケージを使用することでプレーンなメソッドやクラスに属性を指定して Lambda の関数を定義、実装できるようになる。これは Source Generator で必要とされるコードを生成することによって実現しているとのこと。
README では次のようなコードが例示されている。
public class Functions
{
[LambdaFunction]
[RestApi("/plus/{x}/{y}")]
public int Plus(int x, int y)
{
return x + y;
}
}
Lambda Annotations is a new, simplified programming model for writing REST and HTTP API #Lambda functions in .NET 6. Check out the Lambda Annotations preview release.https://t.co/ZQcbYtPLcA#dotnet #AWS #dotNETonAWS
— .NET on AWS (@dotnetonAWS) December 22, 2021
ReSharper and Rider 2021.2.3 have landed | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2021/12/28/resharper-rider-2021-2-3/
ReSharper と Rider の 2021.2.3 がリリースされた。
このリリースではいくつかのバグ修正が行われている。また 2021.2.3 以降から JetBrains アカウントでのサインインが必要となるようになった。
ReSharper 2021.3.2 and Rider 2021.3.2 Bug Fixes Are Here | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2021/12/24/resharper-2021-3-2-and-rider-2021-3-2-bug-fixes/
ReSharper と Rider の 2021.3.2 がリリースされた。
このリリースではコード解析等に関するいくつかのバグ修正が行われている。
Release 10.0.0 · jbogard/MediatR
https://github.com/jbogard/MediatR/releases/tag/v10.0.0
MediatR 10.0.0 がリリースされた。
このリリースでは .NET Standard 2.1 以降向けに IAsyncEnumerable<T>
のサポートが追加され、ストリーミングを扱う API のサポートが向上した。
A Comprehensive Guide to Port from EF6 to EF Core
https://devblogs.microsoft.com/dotnet/a-comprehensive-guide-to-port-from-ef6-to-ef-core/
Entify Framework 6 (EF Core 6 ではない) から Entity Framework Core への移行を推奨する記事。この記事では移行のメリットと移行ガイドが新しくなったことについて触れている。
アーティクル、スライドなど
OpenTelemetry .NETを理解する (1) OpenTelemetryとは - 銀の光と碧い空
https://tech.tanaka733.net/entry/2022/01/opentelemetry-dotnet-01
メトリクスを取り扱う OpenTelemetry についてと .NET の対応の現状についての記事。
【C# 11 候補】 半自動プロパティ | ++C++; // 未確認飛行 C ブログ
https://ufcpp.net/blog/2021/12/semi-auto-property/
C# 11 で検討されている自動プロパティーのバッキングフィールドを読み書きするための field
キーワードについての記事。利用シチュエーションやキーワードの取り扱われ方などにも触れている。
【C# 11 候補】 UTF-8 リテラル | ++C++; // 未確認飛行 C ブログ
https://ufcpp.net/blog/2021/12/utf8-literal
C# 11 以降での .NET における UTF-8 文字列のリテラルの取り扱いのステータスについての記事。Utf8String の空気感とバイト配列などに変換できる UTF-8 文字列リテラルについてなど。
【C# 11 候補】リスト パターン【VS 17.1 p2 で追加予定】 | ++C++; // 未確認飛行 C ブログ
https://ufcpp.net/blog/2021/12/list-pattern/
C# 11 で検討されている配列や List<T>
のようなものにマッチするリストパターン []
についての記事。
ImmutableArray に対してコレクション初期化子 | ++C++; // 未確認飛行 C ブログ
https://ufcpp.net/blog/2021/12/immutable-array-init/
ImmutableArray
に対するコレクション初期化子の挙動が一見して想定と異なる理由と課題についての記事。
【C# 11 候補】コレクション リテラル | ++C++; // 未確認飛行 C ブログ
https://ufcpp.net/blog/2021/12/collection-literal/
C# 11 で検討されているコレクション(配列やリストなど)で使えるコレクションリテラル []
についての記事。
【C# 11 で再検討】Countable | ++C++; // 未確認飛行 C ブログ
https://ufcpp.net/blog/2022/1/countable
Index
サポートに Countable (Count または Length を持った型) を広げるという案についての記事。
Comet Development on macOS
https://dev.to/davidortinau/comet-development-on-macos-1o38
macOS 上で Comet (MAUI の MVU フレームワーク) を使用して、アプリケーションを実装してみるという記事。
Customising generated code with marker attributes: Creating a source generator - Part 4
Source Generator でマーカー属性を利用してコード生成をカスタマイズする方法について解説している記事。
独自の属性に設定値を指定し、それを Source Generator から読み取ってコード生成をカスタマイズしている。
Secure a Blazor WASM ASP.NET Core hosted APP using BFF and OpenIddict
Blazor WebAssembly と ASP.NET Core アプリケーションで OpenIddict を使用した OpenID Connect 認証を行う方法についての記事。
C# の静的コード解析から GitLab Code Quality まで
https://zenn.dev/masakura/articles/99ad5ac9637dea
ReSharper Command Line Tools を使用してコードの静的解析を行い、GitLab Code Quality で Merge Request に解析結果を反映するといった手法についての記事。
.NET Annotated Monthly | January 2022 | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2022/01/04/net-annotated-monthly-january-2022/
JetBrains による .NET 関連の記事や情報のまとめ2022年1月号。
BlazorにおけるDIのScopeについて - Qiita
https://qiita.com/yoshi1220/items/4ebb2e2fc5528e16108b
Blazor Server と Blazor WebAssembly の両環境における DI のスコープの挙動について解説している記事。
C#でKagglerに話題のLightGBMを使ってタイタニック号の生存者予測をしてみた - Qiita
https://qiita.com/TechNinja/items/2e9d9fca8f9a65258922
ML.NET と LightGBM を組み合わせて C# でタイタニック号の生存者予測を実行するという記事。
IncrementalSourceGeneratorの開発&デバッグ方法 序 - Qiita
https://qiita.com/WiZLite/items/48f37278cf13be899e40
Incremental Source Generator の開発とデバッグ手法についての記事。
.NET6でブラウザ完結のC#開発環境を作る話 - Qiita
https://qiita.com/Kujiro/items/4b9223a9b79179d2bc0d
Blazor WebAssembly と Roslyn を使用してブラウザー上でコードをコンパイルして実行できる環境を実装したことについての記事。
記事では高速化やブロッキング処理など、実装上での工夫などを取り上げている。
MetricsEventSourceを利用する - Qiita
https://qiita.com/skitoy4321/items/36e1c693bc6719ec122a
System.Diagnostics.Metrics.MetricsEventSource
の利用方法を解説している記事。
MetricsEventSource
はメトリクスを EventSource
として扱うもののため、dotnet-trace
のような外部から取得することができる。
.NET のオプション機能を完全に理解した。 - 鷲ノ巣
https://tech.blog.aerie.jp/entry/2021/12/24/161443
Microsoft.Extensions.Configuration
の IOptions<T>
といった ASP.NET Core のオプションパターンについての記事。
コンフィギュレーションの更新を動的に行う必要があるケースでの IOptionsMonitor<T>
の更新処理や IConfigureOptions<T>
について解説している。
neue cc - ConsoleAppFramework v4 - Minimal API for CommandLine tool
https://neue.cc/2021/12/30.html
コンソールアプリケーションを実装するフレームワーク ConsoleAppFramework v4 についての紹介と、そこで導入された Minimal API についての紹介している記事。
Visual Studioで外部ソースを含めたデバッグを実行する | Yucchiy's Note
https://blog.yucchiy.com/2022/01/debugging-external-sources-with-vs/
Visual Studio 2022 でデバッグ実行時に依存ライブラリなども含めて外部のソースコードをステップ実行する方法についての記事。
System.Text.Json features in .NET 6
https://blog.okyrylchuk.dev/system-text-json-features-in-the-dotnet-6
.NET 6 の System.Text.Json に追加された機能の紹介記事。
循環参照の無視、シリアライズ/デシリアライズの通知、プロパティーのシリアライズ順序、生 JSON 書き込み、IAsyncEnumerable
サポート、シリアライズ/デシリアライズの Stream サポート、オブジェクトモデルでの操作、といったものを紹介している。
Fast File IO with .NET 6 - Adam Sitnik
https://adamsitnik.com/files/Fast_File_IO_with_DOTNET_6.pdf
.NET 6 でのファイル IO についての変更点やパフォーマンス向上の Tips を紹介したスライド。
Last but not least, "Fast File IO with .NET 6": https://t.co/RODoZdg5Rr (the recording is not public yet) pic.twitter.com/gXBzFx7RFp
— Adam Sitnik (@SitnikAdam) January 3, 2022
サイト、ドキュメントなど
gRPC クライアント側の負荷分散 | Microsoft Docs
https://docs.microsoft.com/ja-jp/aspnet/core/grpc/loadbalancing?view=aspnetcore-6.0
gRPC クライアントのクライアントサイドロードバランシングについてのドキュメント。
接続先を解決するリゾルバーと接続先を決定するロードバランサーについて解説している。組み込みのリゾルバーとロードバランサー以外にカスタム実装を行う方法についても触れている。
ツイート
TIL about `ExceptionDispatchInfo.SetCurrentStackTrace` that can be very useful for setting a stack trace before passing an exception to `TaskCompletionSource` or `ManualResetValueTaskSourceCore`. pic.twitter.com/WhA3ZDpNSc
— Sergey Teplyakov (@STeplyakov) January 4, 2022
例外を TaskCompletionSource
などに渡すときに .NET 5 で追加された ExceptionDispatchInfo.SetCurrentStackTrace
でスタックトレースをセットしてから渡すことで発生位置を取れるようにできるというテクニック。
async Task Main()
{
// ExceptionDispatchInfo.SetCurrentStackTrace なし
try
{
await NantokaAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
// NantokaAsync を待機したところから始まる
// at Program.Main() in /path/to/Program.cs:line 0
}
// ExceptionDispatchInfo.SetCurrentStackTrace あり
try
{
await NantokaWithStackTraceAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
// NantokaWithStackTraceAsync の中から始まる
// at Program.NantokaWithStackTraceAsync() in /path/to/Program.cs:line 0
// at Program.Main() in /path/to/Program.cs:line 0
}
}
Task NantokaWithStackTraceAsync()
{
var tsc = new TaskCompletionSource();
tsc.SetException(ExceptionDispatchInfo.SetCurrentStackTrace(new Exception("shinu")));
return tsc.Task;
}
Task NantokaAsync()
{
var tsc = new TaskCompletionSource();
tsc.SetException(new Exception("shinu"));
return tsc.Task;
}
Very close to getting an MAUI app running inside the MacOS status bar! pic.twitter.com/LLovOBdjiM
— Drastic Actions (@drasticactionSA) January 2, 2022
macOS のステータスバーから MAUI アプリケーションを表示できそうという話。
We're in the process of converting WinDbg to .Net 6, and in the meantime we're also building against .Net 4.6.1 with the same project. It's going to be so nice to do a pass through the code using new C# and .Net features that will simplify our code. Hopefully done in January...
— Tim Misiak (@timmisiak) December 24, 2021
WinDbg を .NET 6 への移行をしているという話。
Did you know that in .NET 6 System.Text.RegularExpressions.Capture has a ValueSpan property? So, now you can parse regular expressions match results without allocations😍 (@konradkokosa knows ;))#net #dotet #memorymanagement #memoryexpert pic.twitter.com/4MdXjeEpRQ
— Dotnetos (@dotnetosorg) January 6, 2022
.NET 6 で Regex のキャプチャーに ValueSpan
プロパティという ReadOnlySpan<char>
を返すプロパティが追加され、Value
プロパティと異なりアロケーションなしでキャプチャーした文字列を取得できるという話。(Value
プロパティは Substring
で切り出している)
.NET 6 supports bot Windows and IANA time zones on all platforms.
— Oleg Kyrylchuk (@okyrylchuk) December 24, 2021
TimeZoneInfo.FindSystemTimeZoneById implicitly converts IANA IDs.
New APIs in TimeZoneInfo type:
• TryConvertIanaIdToWindowsId
• TryConvertWindowsIdToIanaId
• HasIanaId#dotnet6 #coding #devcommunity pic.twitter.com/mk568qbLfK
TimeZoneInfo
クラスに Windows のゾーン ID と IANA の ID を相互変換するためのメソッドが追加されたという話。
Deep Dive
Faster ParseHeaders by EgorBo · Pull Request #39216 · dotnet/aspnetcore
https://github.com/dotnet/aspnetcore/pull/39216
Kestrel の HTTP ヘッダーパーサーを最適化して高速化するという PR。現状 SSE2 での実装を試みている様子。
Faster IndexOf for substrings by EgorBo · Pull Request #63285 · dotnet/runtime
https://github.com/dotnet/runtime/pull/63285
文字列の IndexOf を高速化するという PR。アルゴリズムは SIMD-friendly algorithms for substring searching というものとのこと。
Cache the delegate for static method group conversions. by pawchen · Pull Request #58288 · dotnet/roslyn
https://github.com/dotnet/roslyn/pull/58288
メソッドグループのデリゲート変換をキャッシュしたいという試みの PR。
ANCM + ARM64 Tracking · Issue #39281 · dotnet/aspnetcore
https://github.com/dotnet/aspnetcore/issues/39281
Windows の IIS で ASP.NET Core アプリケーションをホストする際に使用する ASP.NET Core Module を ARM64 版でもビルドできるようにするという話の Issue。
Add CompilerGeneratedAttribute to record members by Youssef1313 · Pull Request #58542 · dotnet/roslyn
https://github.com/dotnet/roslyn/pull/58542
レコード型の一部のメンバー (ToString や Equals, GetHashCode など) はコンパイラーが生成するものであるにもかかわらず CompilerGeneratedAttribute
がついていないのでつけるという PR。
Initial support for semi auto properties by Youssef1313 · Pull Request #57076 · dotnet/roslyn
https://github.com/dotnet/roslyn/pull/57076
半自動プロパティの初期サポート実装の PR。
is:open label:arch-loongarch64 · Issues · dotnet/runtime · GitHub
https://github.com/dotnet/runtime/labels/arch-loongarch64
中国発の CPU アーキテクチャー LoongArch に対応させたいという Issue (と PR)。
この Issue と PR を出している Qiao さんは GitHub のプロフィールによれば所属は Loongson の模様。