2022-01-07: Visual Studio 17.1 Preview 2, MAUI Preview 11, Pinta 2.0, Amazon.Lambda.Annotations

Published on Friday, 07 January 2022

トピックス

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 関連の機能の向上については別記事にて詳しく説明されているのでそちらも参照のこと。

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;
    }
}

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

https://andrewlock.net/creating-a-source-generator-part-4-customising-generated-code-with-marker-attributes/

Source Generator でマーカー属性を利用してコード生成をカスタマイズする方法について解説している記事。

独自の属性に設定値を指定し、それを Source Generator から読み取ってコード生成をカスタマイズしている。

Secure a Blazor WASM ASP.NET Core hosted APP using BFF and OpenIddict

https://damienbod.com/2022/01/03/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.ConfigurationIOptions<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 を紹介したスライド。

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

gRPC クライアント側の負荷分散 | Microsoft Docs

https://docs.microsoft.com/ja-jp/aspnet/core/grpc/loadbalancing?view=aspnetcore-6.0

gRPC クライアントのクライアントサイドロードバランシングについてのドキュメント。

接続先を解決するリゾルバーと接続先を決定するロードバランサーについて解説している。組み込みのリゾルバーとロードバランサー以外にカスタム実装を行う方法についても触れている。

ツイート

例外を 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;
}

macOS のステータスバーから MAUI アプリケーションを表示できそうという話。

WinDbg を .NET 6 への移行をしているという話。

.NET 6 で Regex のキャプチャーに ValueSpan プロパティという ReadOnlySpan<char> を返すプロパティが追加され、Value プロパティと異なりアロケーションなしでキャプチャーした文字列を取得できるという話。(Value プロパティは Substring で切り出している)

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 の模様。