2022-12-08: C# Advent Calendar, Rider and ReShrper 2022.3 Released

Published on Thursday, 08 December 2022

トピックス

C#のカレンダー | Advent Calendar 2022 - Qiita

https://qiita.com/advent-calendar/2022/csharplang

2022年の C# Advent Calendar。

C# Advent 2022

https://csadvent.christmas/

2022年の英語圏での C# Advent Calendar。

Rider 2022.3: Support for .NET 7 SDK, the Latest From C#11, Major Performance Improvements, and More! | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/07/rider-2022-3/

Rider 2022.3 がリリースされた。

記事ではこのリリースに含まれる次のトピックについて紹介している。

  • パフォーマンスの改善
  • .NET 7 SDK サポート
  • WSL2 サポート
  • UX/UI 改善
    • ドッキングツールウィンドウ
    • 新しいメインツールバー
  • 最新の C# 機能
  • Web 開発のアップデート
  • ゲーム開発のアップデート
  • NuGet サポート
    • Central Package Management や脆弱なバージョンの検出
  • ARM64 サポートの早期プレビュー
    • ARM プラットフォーム上の Windows と Linux での動作のサポート
  • その他ハイライト
    • 組み込み dotMemory の macOS と Linux サポートなど

ReSharper 2022.3 Released With More C# 11 Features, NuGet Vulnerabilities Detection, and Support for Visual Studio ARM64. | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/07/resharper-2022-3/

ReSharper 2022.3 がリリースされた。

記事ではこのリリースに含まれる次のトピックについて紹介している。

  • C# サポート
    • C# 11 の機能
    • 言語インジェクション
    • グローバルインポート ガターマーク
  • 脆弱な依存関係検出
  • ARM64 上の Visual Studio のサポート
  • Dynamic Program Analysis からのデータベースインスペクション
  • C++ サポート
  • その他
    • デコンパイラーの更新や型とプロジェクトの依存ダイアグラムの GraphML フォーマットでのインポート/エクスポート

dotCover, dotMemory, dotPeek, and dotTrace 2022.3 Released! | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/07/dotcover-dotmemory-dotpeek-dottrace-2022-3/

dotCover, dotMemory, dotPeek, dotTrace の 2022.3 がリリースされた。

  • dotCover: ARM64 の Windows のサポートや ARM32 上の Linux でのランナーのサポートなどが追加された
  • dotMemory: Linux と macOS の Rider 上で利用可能となり、ARM64 の Windows もサポートされた
  • dotPeek: static abstract やジェネリック属性のような新しい機能をサポートした
  • dotTrace: ARM64 の Windows のサポートや ARM32 上の Linux でのランナーのサポートが追加され、スナップ解析のいくつかの改善と Performance View の非推奨化

Upgrade of .NET agent for Azure Pipelines - Azure DevOps Blog

https://devblogs.microsoft.com/devops/upgrade-of-net-agent-for-azure-pipelines/

Azure Pipelines のエージェントが .NET Core 3.1 から .NET 6 へと更新するアナウンス。

これは新しい OS とアーキテクチャーのサポートを行うためと、.NET Core 3.1 のサポートが12月13日に終了するためとしている。

新しいエージェントは3つのフェーズで展開される。フェーズ1はプレビューとしてプレスリリース版のダウンロードしてテストが可能、フェーズ2では Microsoft がホストするエージェントプールの更新、フェーズ3でセルフホストしているエージェントの提供。

記事ではセルフホストプールでの更新に関する注意や FAQ についても書かれている。

Release ILSpy 8.0 Preview 3 · icsharpcode/ILSpy

https://github.com/icsharpcode/ILSpy/releases/tag/v8.0-preview3

ILSpy 8.0 Preview 3 がリリースされた。

このリリースでは C# 11 の必須メンバーの対応や Roslyn のパターン検出の更新、その他不具合や改善が含まれている。

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

(C#) 文字列補間されていない文字列補間を取得する - ネコのために鐘は鳴る

https://ikorin2.hatenablog.jp/entry/2022/11/29/201801

InterpolatedStringHandler を使用したハンドラーのコンストラクターの第一引数に対する CallerArgumentExpression で文字列を受けると、フォーマット前の文字列がとれるというハックを紹介している記事。

ただしこの挙動は本来期待されている挙動と異なり、修正される可能性がある。

Improved Startup Performance in Rider 2022.3 | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/01/improved-startup-performance-in-rider-2022-3/

Rider 2022.3 (現在 EAP) の起動パフォーマンスの向上についての記事。

Rider 2022.3 では IDE のコールドスタートやプロジェクト読み込み時間、ファイルとアセンブリのスキャン、ガベージコレクションとメモリー使用量といった部分での改善について紹介している。

Day 1: How to write tests for HttpClient using Moq

https://dev.to/canro91/how-to-write-tests-for-httpclient-using-moq-2i9e

HttpClient の呼び出しに関するテストを Moq で書くという記事。

Conveying Context with AsyncLocal

https://medium.com/@norm.bryar/conveying-context-with-asynclocal-91fa474a5b42

アンビエントコンテキスト (複数の関数やコンポーネント、タスクをまたいでデータを共有する) をAsyncLocal<T> で実装するという記事。

Visual Basic 2022年の振り返り - Qiita

https://qiita.com/yaju/items/882e1de76a763e098fce

2022年の Visual Basic に関する出来事と記事を紹介している振り返り記事。

C# positional recordsのパラメータ個数上限を探る

https://zenn.dev/shimat/articles/5b81d6627491ab

C# 9 で導入されたレコード型の positional records の positional parameters の上限を調査した記事。

記事では JSON シリアライザーでの上限についても触れている。

.NET 7でLINQに追加されたメソッド - Qiita

https://qiita.com/RyotaMurohoshi/items/71a84fe7a5cf8df57054

.NET 7 の LINQ に追加された OrderOrderDescending について紹介している記事。

Catastrophic backtracking: how can a regular expression cause a ReDoS vulnerability?

https://dev.to/unicorn_developer/catastrophic-backtracking-how-can-a-regular-expression-cause-a-redos-vulnerability-aia

正規表現のバックトラックによる ReDoS 脆弱性についての記事。

各種正規表現パターンとその実行時間、壊滅的なバックトラッキングを回避する方法の紹介などが書かれている。

C# 11 の新機能をいくつか試してみました - Qiita

https://qiita.com/haruka_kotani/items/6f470579b86b005c6cb9

C# 11 の新機能である生文字列リテラル、文字列補完の改行、UTF-8 文字列リテラル、必須メンバー、ファイルローカル型を簡単に紹介している記事。

Rider on Windows 開発環境構築 (コンテナだけWSL)

https://zenn.dev/dynamitecoolguy/articles/17612f6624da4d

Windows 上の Rider で WSL のコンテナーを使用した ASP.NET Core 開発環境の構築手順についての記事。

.NET open source is 'heavily under-funded' says AWS

https://www.theregister.com/AMP/2022/12/01/net_open_source_heavily_underfunded/

AWS がオープンソースな .NET への投資を行っていることについての記事。

Visual Studio 2022 の IntelliCode の入力候補の適用キーを変えたい | ブチザッキ

https://blog.azure.moe/2022/12/03/visual-studio-2022-%e3%81%ae-intellicode-%e3%81%ae%e5%85%a5%e5%8a%9b%e5%80%99%e8%a3%9c%e3%81%ae%e9%81%a9%e7%94%a8%e3%82%ad%e3%83%bc%e3%82%92%e5%a4%89%e3%81%88%e3%81%9f%e3%81%84/

IntelliCode (いわゆる AI コード補完) の確定を Tab キーから変更する方法について紹介している記事。

Visual Studio の設定で → (右矢印キー) での確定に変更できるとのこと (任意のキーには変更できない)。

raw string の空白文字 | ++C++; // 未確認飛行 C ブログ

https://ufcpp.net/blog/2022/12/rawstringwhitespace/

C# 11 の raw string literal の空白文字の取り扱いについての記事。

様々な空白文字やインデントでの取り扱いなどについて解説している。

.NET Annotated Monthly | December 2022 | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/05/net-annotated-monthly-december-2022/

JetBrains による .NET 関連情報のまとめ2022年12月号。

stackalloc の自然な型 | ++C++; // 未確認飛行 C ブログ

https://ufcpp.net/blog/2022/12/stackalloc-natural-type/

変数の型を決定する際の推論として、stackalloc で決定される自然な型 (natural type) が記述方法によって変わることについての記事。

例えば var a = stackalloc byte[10]; の型はポインター (byte*) になるが var a = (stackalloc byte[10]);Span<byte> となる、など。

What's new in the .NET MAUI Community Toolkit - .NET Blog

https://devblogs.microsoft.com/dotnet/whats-new-in-the-dotnet-maui-community-toolkit/

.NET MAUI Community Toolkit の新しい機能について紹介している記事。

記事では新しく追加されたコンポーネントやプラットフォームサポートについて、リリースされているバージョン(1.4.0, 2.0.0, 3.0.0)の違いなどを説明している。

  • Expander View
  • DockLayout
  • StateContainer
  • Tizen サポート
  • .NET 7 サポート
  • MAUI.Markup Toolkit
  • リリースバージョン

Building a new JavaScript linting experience in Visual Studio - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/building-a-new-javascript-linting-experience-in-visual-studio/

Visual Studio 2022 17.4 で新しくなった ESLint による lint サポートの背景を紹介している記事。

記事では vscode-eslint に触発された LSP 拡張機能について、サービスの有効化の手順といったことが書かれている。

Custom Controls for WinForm's Out-Of-Process Designer - .NET Blog

https://devblogs.microsoft.com/dotnet/custom-controls-for-winforms-out-of-process-designer/

Visual Studio で利用する .NET Core 以降の WinForms 向けの外部プロセスで動作するデザイナーでカスタムコントロールをサポートする方法について解説している記事。サンプルプロジェクトを通して移行方法を紹介している。

Logging to Amazon Cloudwatch with Serilog in .NET - Getting Started with Cloudwatch

https://codewithmukesh.com/blog/amazon-cloudwatch-logging-serilog-dotnet/

Serilog を使用して ASP.NET Core (M.E.L.ILogger) から Amazon Cloudwatch へログを記録する方法について解説している記事。

Introducing C#11: Newlines in string interpolation expressions

https://anthonygiretti.com/2022/12/04/introducing-c11-newlines-in-string-interpolation-expressions/

C# 11 では文字列補間のブレース中で改行が可能となったということについての記事。

GitHub Actions で .NETプロジェクトのコードカバレッジを計測する

https://zenn.dev/shimat/articles/03ad92427cbed6

GitHub Actions で Pull request からビルドする際にコードカバレッジを計測し、レポートをコメントなどに残すといった方法を紹介している記事。

C#(.NET Core 3.1, .NET 6)のランタイム上のシステムタイムゾーンを置き換えたい(TimeZoneInfo.LocalがUTCを返すようにしたい) - Qiita

https://qiita.com/fukasawah/items/c42b586745be56fed674

システムのタイムゾーンを無視して TimeZoneInfo.Local が UTC となる値を返すにはどうすればよいかという記事。

記事ではリフレクションで強引に置き換えることで対処する方法や、試みた理由などが書かれている。

Blazor WebAssemblyでマルチスレッドを使っていくための準備 (.NET 8を待っています) - Qiita

https://qiita.com/kaorumori/items/d6d68987b8468f8f6b32

.NET 8 の Blazor WebAssembly でサポート予定のマルチスレッド機能を .NET 7 で実験的機能として WebAssembly Browser App (Blazor ではない) で動かしてみる手順を紹介している記事。

記事では実際に負荷をかけた際に複数のコアが使用されていることを確認している。

Macを使わずWindowsだけでiOSアプリをデバッグする方法(.NET MAUI) - Qiita

https://qiita.com/MAUIHighSchool/items/1ffcfa508342fc250757

Windows の Visual Studio から直接 iOS アプリケーションをデプロイしてデバッグする方法についての記事。

New features in C# 11 (NET 7) with interactive examples

https://medium.com/entech-solutions/new-features-in-c-11-net-7-with-interactive-examples-c8e4e5ea1e5a

C# 11 の機能を使った例とそのコードの .NET Fiddle で実行できるようにして紹介している記事。

Processing data in parallel using Channels

https://maciejz.dev/processing-data-in-parallel-channels/

System.Threading.Channels を使用して並列でデータを処理するコードを実装する方法について紹介している記事。

Detect and Remove Dead Code with Roslyn

https://jason-ge.medium.com/detect-and-remove-dead-code-with-roslyn-26e741b20d3c

Roslyn を使用してデッドコード(使用されていない型)の検出と削除を行う方法についての記事。

How to use SwiftUI components in MAUI

https://medium.com/@tema.denisoff/how-to-use-swiftui-components-in-maui-f43c54d2173c

.NET MAUI で Swift UI のコンポーネントを使用する方法についての記事。

Swift UI に対する UIKit ラッパーの作成とその利用方法など。

Functional MAUI control based on SwiftUI view

https://medium.com/@tema.denisoff/functional-maui-control-based-on-swiftui-view-e23135d1f2bc

.NET MAUI から SwiftUI のコンポーネントをプロパティーのバインディングなどを含めて機能する形で実装する方法についての記事。

C#におけるnull合体演算子 ?? の優先順位と結合規則 - Qiita

https://qiita.com/denkiuo604/items/87345ce8031640b37e7a

C# の null 合体演算子 (??) の優先順位と結合規則について解説している記事。

.NET 7こそがC# SIMDプログラミングを始めるのに最適である理由

https://zenn.dev/pcysl5edgo/articles/d3e787599c5c8b

.NET 7 で C# で SIMD を活用したコードを書く際に .NET 6 の時よりも fixed が不要であったり x64 と ARM64 での分岐が不要となり、より書きやすくなっていることを紹介している記事。

.NET Annotations Lambda Framework を使って .NET 6 のサーバーレス API を作成する | DevelopersIO

https://dev.classmethod.jp/articles/net-annotations-lambda-framework/

AWS のプレビューリリースしている .NET Annotations Lambda Framework を使用して .NET 6 でサーバーレス API (Lambda + API Gateway) を実装する方法を紹介している記事。

C#11 による世界最速バイナリシリアライザー「MemoryPack」の作り方 - Speaker Deck

https://speakerdeck.com/neuecc/c-number-11-niyorushi-jie-zui-su-bainarisiriaraiza-memorypack-nozuo-rifang

MemoryPack という高速なシリアライザーを実装する上での工夫を元に C# 11 の言語機能や Source Generator、.NET のライブラリーのモダンな活用の仕方を紹介しているスライド。

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

DotNetBrowser | .NET web browser for WPF and WinForms apps

https://www.teamdev.com/dotnetbrowser

WPF や Windows Forms で埋め込みブラウザー(いわゆる WebView)を実現する Chromium ベースの商用コンポーネントライブラリー。

CefSharp との違いとしてホストするモデル(CefSharp よりも外部プロセスで動作する)や動画サポートの有効化を簡単に行えるなどがあるとのこと。

featbit/featbit: A scalable, high-performance feature management and progressive experimentation platform

https://github.com/featbit/featbit

フィーチャーフラグを管理するアプリケーションサーバー。

Developer News - Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=MadsKristensen.DeveloperNews

Visual Studio 内に開発者向けのニュースを復活させるための実験的な拡張。

FastEndpoints

https://fast-endpoints.com/

Minimal API や MVC に変わって Request-Endpoint-Response (REPR) パターンと呼ばれる実装を行うための ASP.NET 向けフレームワーク。

maraf/dotnet-wasm-react: .NET on WASM inside a react component

https://github.com/maraf/dotnet-wasm-react

React コンポーネントから .NET WebAssembly を扱うサンプルコード。

vscode-pets - Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=tonybaloney.vscode-pets

Visual Studio Code 内にペットを飼うことのできる拡張。mod というペットを呼び出すと dotnet-bot (紫のあれ) が出てくる。

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

ツイート

.NET Conf 2022 の動画とその内容についてのメモのマインドマップ。

.NET 7 の MAUI で Xamarin.Forms の MessageCenter は非推奨となったので .NET Community Toolkit の WeekReferenceMessenger を使用が推奨という話。

C# の言語デザインのディスカッションとワーキンググループのミーティングノートのありか。

Deep Dive

[Breaking change]: WebApplicationBuilder gives ASPNET_-prefixed environment variables lower precedence · Issue #498 · aspnet/Announcements

https://github.com/aspnet/Announcements/issues/498

ASPNET_ プレフィックスの環境変数由来の構成は .NET 7 以前の ASP.NET Core でコマンドライン引数や DOTNET_ プレフィックスの値を上書きしていたが、.NET 7 以降では ASPNET_ プレフィックスでの指定はコマンドライン引数や DOTNET_ プレフィックスによる指定で上書きされるという破壊的変更。

VS2022 Search results on Nuget - Visual Studio Feedback

https://developercommunity.visualstudio.com/t/VS2022-Search-results-on-Nuget/10163787

Visual Studio 2022 の NuGet 管理の画面で検索後に少しスクロールしていて1件目が見えないことがあるという不具合。