トピックス
C#のカレンダー | Advent Calendar 2022 - Qiita
https://qiita.com/advent-calendar/2022/csharplang
2022年の C# Advent Calendar。
C# Advent 2022
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 に追加された Order
と OrderDescending
について紹介している記事。
Catastrophic backtracking: how can a regular expression cause a ReDoS vulnerability?
正規表現のバックトラックによる 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 の入力候補の適用キーを変えたい | ブチザッキ
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
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
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
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
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 の動画とその内容についてのメモのマインドマップ。
本日の資料 (マインドマップ) はこちらの URL からご覧いただけますー。https://t.co/fkxmbDWGo1 #tnrspr
— @jsakamoto (@jsakamoto) November 29, 2022
.NET 7 の MAUI で Xamarin.Forms の MessageCenter は非推奨となったので .NET Community Toolkit の WeekReferenceMessenger を使用が推奨という話。
It's official, MessagingCenter has been deprecated in .NET 7 for .NET MAUI apps. Time to upgrade to the WeakReferenceMessenger in the .NET Community Toolkit! I got you covered with my recent video: https://t.co/VNL2mPH8bu #dotnetmaui #dotnet7 pic.twitter.com/DPEQTk4kXo
— James Montemagno (@JamesMontemagno) December 3, 2022
C# の言語デザインのディスカッションとワーキンググループのミーティングノートのありか。
You can follow the C# language design discussions and working groups by reading the meeting notes here https://t.co/ZkiH8jFLHK #dotnet #csharp #oss
— hachyderm.io/@davidfowl (@davidfowl) December 6, 2022
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件目が見えないことがあるという不具合。