.NET 11 トラッカー
.NET 11 のサイクル全体を 1 つのブックマークで。
このまとめは .NET 11 について私が書いたすべてを集めたものです: プレビュー、ランタイムの変更、GC の更新、JIT の改善、そして新しい BCL の API。このページをブックマークしておけば、プレビューが出るたびに最新の情報に更新していきます。
まず読むべき記事
.NET 11 が初めてという方は、リストの上部にある “.net 11 preview” タグの記事から始めてください。それぞれが 1 つのプレビューのハイライトを扱っています。.NET 11 の機能は累積していくため、古い記事もそのまま役に立ちます。
このページについて
下のテーブルは、.net 11、dotnet 11、.net 11 preview、dotnet、.net のいずれかのタグが付いた記事から自動的に生成されます。週次のジョブで並べ替えているため、最新のカバレッジが上位に来ます。
時系列のカバレッジではなくチートシート形式のクイックリファレンスが欲しい場合は、/pillars/ インデックスからリンクされている「EF Core 11 cheat sheet」と「C# 14 の機能」のまとめもご覧ください。
インデックス (164 件)
2026 / 05
- .NET 11 がデッドロックなしのプロセス出力キャプチャを追加
.NET 11 Preview 4 では、stdout と stderr を並行して読み取る新しい System.Diagnostics.Process API、起動とキャプチャを 1 行で行うヘルパー、そして KillOnParentExit が登場します。
- 修正: MAUI Android で Gradle ビルドが .apk ファイルを生成できなかった
10 回のうち 9 回、本当の Gradle エラーは MSBuild ログのもっと上に埋もれています。JDK 17 のパス、maui-android ワークロードの欠落、Windows のロングパスが典型的な根本原因です。
- Fix: A possible object cycle was detected
System.Text.Json は逆参照を持つグラフのシリアライズを拒否します。ReferenceHandler.IgnoreCycles を設定するか、DTO に射影するか、逆向きポインタに [JsonIgnore] を付けてください。Preserve は最終手段です。
- 修正: EF Core マイグレーション中の SqlException: Timeout expired
マイグレーションはランタイムの CommandTimeout ではなくデザインタイムの DbContext を使用します。UseSqlServer(o => o.CommandTimeout(...))、接続文字列の Command Timeout、または Migrate() の前の Database.SetCommandTimeout でタイムアウトを設定してください。
- 修正: System.Text.Json.JsonException: The JSON value could not be converted
System.Text.Json は、受信した JSON トークンが対象の CLR 型と一致しない場合にこの例外をスローします。JSON を型に合わせるか、両者を橋渡しする JsonConverter または JsonSerializerOption を登録してください。
- 修正: System.Security.Cryptography.CryptographicException: Keyset does not exist
証明書の秘密鍵は、現在のプロセス ID が読めない別の Windows 鍵ファイルにあります。ACL を設定するか、MachineKeySet で PFX を読み込むか、EphemeralKeySet を使用してください。
- 解決: The command 'dotnet' could not be found が CI で出る
CI ランナーが dotnet を解決できないのは、そのステップで SDK が未インストール、もしくはインストール済みでも PATH に無いためです。actions/setup-dotnet を使い、global.json を固定し、DOTNET_ROOT と ~/.dotnet/tools をエクスポートしてください。
- 修正: System.IO.FileNotFoundException: Could not load file or assembly が発行済みアプリで発生する
dotnet run では動くのに dotnet publish 後に失敗するケースです。原因はランタイムではなく発行フォルダーに DLL がないことです。deps.json、ProjectReference の Private、トリミングを確認してください。
- 修正: InvalidOperationException: Synchronous operations are disallowed
Stream.Read または Write の呼び出しを ReadAsync/WriteAsync に置き換えます。最終手段として、Kestrel、IIS、または IHttpBodyControlFeature 経由でリクエスト単位に AllowSynchronousIO を設定します。
- Fix: Blazor の RZ10012: Found markup element with unexpected name
Blazor の Razor コンパイラーは、PascalCase のタグに対応するコンポーネント型がスコープ内に見つからないと RZ10012 を出力します。_Imports.razor にコンポーネントの名前空間の @using を追加するか、コンポーネントに @namespace を追加してから再ビルドしてください。
- Fix: dotnet ef migrations add が 'Unable to create an object of type DbContext' で失敗する
EF Core の設計時ツールが DbContext のインスタンスを作成できませんでした。WebApplication.CreateBuilder で host を公開するか、正しい startup project を指定するか、IDesignTimeDbContextFactory を実装してください。
- Fix: MSB3027 Could not copy X to Y. Exceeded retry count of 10. Failed
MSB3027 は、MSBuild がファイルを 10 回コピーしようとしたが、別のプロセスが宛先を保持し続けていたことを意味します。ロック中のプロセスを終了するか、bin/obj をウイルス対策ソフトの除外に追加するか、CopyRetryCount を引き上げてください。
- Fix: The type or namespace name 'X' could not be found (プロジェクト参照を追加した直後)
新しい ProjectReference 直後の CS0246 は、ほぼ TargetFramework の不一致、古い obj/ フォルダ、または using ディレクティブの欠落のいずれかです。可能性の高い順に 5 つの対処を示します。
- 解決方法: Cannot consume scoped service 'X' from singleton 'Y'
ASP.NET Core のスコープ検証は、シングルトンが scoped 依存をプロセス全体にわたってキャプチャしてしまう場合にこの例外を投げます。コンシューマーを scoped にするか、IServiceScopeFactory を注入して必要に応じてスコープを作成してください。
- Fix: PlatformNotSupportedException: Operation is not supported on this platform (Native AOT)
Native AOT は JIT とインタープリターを取り除くため、reflection emit、式ツリーのコンパイル、未知の MakeGenericType は実行時に例外を投げます。IL3050 で呼び出しを特定し、ソースジェネレーターまたは事前生成された経路に置き換えます。
- 解決方法: Unable to resolve service for type 'X' while attempting to activate 'Y'
ASP.NET Core は、コンストラクターが登録されていない型、別のコンテナーに登録された型、またはホストのビルド後に追加された型を要求した場合にこの例外をスローします。3 つの具体的な修正でほぼすべてのケースをカバーします。
- 修正: TaskCanceledException: A task was canceled in HttpClient
HttpClient は 3 つの異なる理由で TaskCanceledException をスローします。タイムアウト、呼び出し元のキャンセル、または接続レベルの中断です。InnerException と CancellationToken.IsCancellationRequested で区別したうえで、正しい原因を修正してください。
- Copilot Studio の .NET 10 WebAssembly 移行: コールドパスで 20%、ウォームパスで 5%
Microsoft は Copilot Studio の WASM エンジンを .NET 8 から .NET 10 に移行しました。JIT/AOT デュアルパッケージ、fingerprinting、WasmStripILAfterAOT がその数字を説明します。
- Fix: The JSON value could not be converted to System.DateTime
System.Text.Json は DateTime に ISO 8601 文字列のみ受け付けます。2026-05-08T14:00:00Z を送るか、JsonConverter を登録してフォーマットをパースしてください。空文字や Unix タイムスタンプも例外を投げます。
- Microsoft Agent Framework のワークフローが Durable Task スタックでプロセス再起動を生き延びるようになりました
Agent Framework のワークフローを Microsoft.Agents.AI.DurableTask で包むと、各エグゼキュータステップにチェックポイントが入ります。クラッシュ、再デプロイ、再起動でも、停止した場所から続行されます。
- 修正: The instance of entity type cannot be tracked because another instance with the same key value is already being tracked
EF Core 11 は、1 つの DbContext 内で 2 つのオブジェクトが主キーを共有するとこの例外をスローします。古い方をデタッチするか、その場で更新してください。読み取り側の AsNoTracking で衝突を防げます。
- 修正: A second operation was started on this context instance before a previous operation completed
EF Core は同じ DbContext 上で 2 つの await が並行に実行されるとこの例外をスローします。各呼び出しを順次 await するか、IDbContextFactory で並行する作業単位ごとに新しい DbContext を取得してください。
- 高パフォーマンスな Xamarin.Forms ListView を MAUI CollectionView へ移行する
ListView からすでにパフォーマンスを絞り出していたアプリ向けの、Xamarin.Forms 5.0 ListView から .NET MAUI 11 CollectionView へのステップバイステップな移行ガイド。セルのリサイクル、仮想化、グルーピング、プルツーリフレッシュ、コンテキストアクション、選択、ItemsLayout、EmptyView、そして実アプリで踏みがちな落とし穴を扱います。
- Microsoft Agent Framework は FunctionApprovalRequestContent でリスクの高いツール呼び出しをゲートします
AIFunction を ApprovalRequiredAIFunction でラップすると、エージェントは実行の途中で停止して許可を求めます。C# でのリクエストとレスポンスのフローを解説します。
- 修正: System.InvalidOperationException: No connection string named 'DefaultConnection' could be found
.NET 11 で GetConnectionString が null を返す場合、appsettings.json にキーがない、ビルド出力にコピーされていない、または間違った環境ファイルが選ばれているかのいずれかです。3 つのチェックで 95% のケースが解決します。
- C# で T[] を ReadOnlyMemory<T> に変換する方法 (暗黙の演算子と明示的なコンストラクター)
.NET 11 で T[] を ReadOnlyMemory<T> にラップする 3 つの方法。暗黙の変換、明示的なコンストラクター、AsMemory()。それぞれが正解となる場面を解説します。
- Agent Governance Toolkit が .NET からの MCP ツール呼び出しすべての前に YAML ポリシーを配置する
Microsoft の新しい Microsoft.AgentGovernance パッケージは、MCP ツール呼び出しをポリシーカーネル、セキュリティスキャナー、レスポンスサニタイザーで包みます。各部品が何をするのか、C# での配線がどうなるのかを見ていきます。
- .NET 11 で Serilog と Seq による構造化ログを設定する方法
.NET 11 の ASP.NET Core アプリに Serilog 4.x と Seq 2025.2 を組み込むための完全ガイド。AddSerilog と UseSerilog の違い、二段階ブートストラップロギング、JSON 設定、エンリッチャー、リクエストロギング、OpenTelemetry トレース相関、API キー、そしてバッファリング、保持期間、シグナルレベルにまつわる本番環境での落とし穴を解説します。
- .NET 11と無料バックエンドでOpenTelemetryを使う方法
OTLPエクスポーターを使って.NET 11 ASP.NET CoreアプリケーションにOpenTelemetryのトレース、メトリクス、ログを組み込み、無料のセルフホストバックエンドへ送信します。ローカル開発にはstandalone Aspire Dashboard、セルフホストの本番環境にはJaegerとSigNoz、両方が必要なときはOpenTelemetry Collectorを使います。
- Testcontainers で本物の SQL Server に対する統合テストを書く方法
Testcontainers 4.11 と EF Core 11 を使い、ASP.NET Core の統合テストを本物の SQL Server 2022 に対して実行するための完全ガイドです。WebApplicationFactory の組み立て、IAsyncLifetime、DbContext 登録の差し替え、マイグレーションの適用、並列実行、Ryuk によるクリーンアップ、CI のはまりどころを解説します。
2026 / 04
- Claude Code 2.1.122 で環境変数から Bedrock のサービス階層を選べるようになりました
Claude Code v2.1.122 は ANTHROPIC_BEDROCK_SERVICE_TIER 環境変数を追加し、X-Amzn-Bedrock-Service-Tier ヘッダーとして送信します。flex に設定すればエージェント呼び出しが 50 パーセント割引になり、priority にすれば応答が高速になります。SDK のコードを触る必要はありません。
- ASP.NET Core 11 でエンドポイントごとのレート制限を追加する方法
ASP.NET Core 11 におけるエンドポイントごとのレート制限の完全ガイド: fixed window と sliding window、token bucket、concurrency のいずれを選ぶか、RequireRateLimiting と [EnableRateLimiting] の違い、ユーザーや IP によるパーティショニング、OnRejected コールバック、そして誰もが踏む分散デプロイの落とし穴。
- .NET 11 で新しい System.Threading.Lock 型を使う方法
System.Threading.Lock は .NET 9 で登場し、.NET 11 と C# 14 では既定の同期プリミティブです。本ガイドでは lock(object) からの移行、EnterScope の動作、await・dynamic・ダウンレベル ターゲットにまつわる落とし穴を解説します。
- INotifyPropertyChanged 用のソースジェネレーターを書く方法
C# 14 と .NET 11 で INotifyPropertyChanged 用の独自のインクリメンタルなソースジェネレーターを構築する完全ガイドです。IIncrementalGenerator パイプライン、マーカー属性、partial class 出力、SetProperty パターン、AOT 対応を保つ方法を扱います。
- .NET でファイルの書き込みが完了したことを検知する方法
FileSystemWatcher は書き込み側が終わる前に Changed を発火します。.NET 11 でファイルが完全に書き込まれたことを知るための信頼できる 3 つのパターン: FileShare.None でオープンする、サイズの安定化でデバウンスする、そして問題そのものを回避するプロデューサー側の rename トリックです。
- .NET 11 で SearchValues<T> を正しく使う方法
SearchValues<T> は IndexOfAny の 5 倍から 250 倍速いですが、ランタイムが期待する使い方をした場合に限ります。static としてキャッシュするルール、StringComparison の落とし穴、使うべきでない場面、そして誰も書いていない IndexOfAnyExcept による反転トリックを解説します。
- SkiaSharp 4.0 Preview 1: 不変な SKPath、可変フォント、そして新しい共同メンテナー
SkiaSharp 4.0 Preview 1 が、Uno Platform を .NET チームと並ぶ共同メンテナーとして迎えて登場しました。SKPath は新しい SKPathBuilder の背後で不変になり、HarfBuzzSharp は OpenType 可変フォントの軸を完全に制御できるようになります。
- 大きなファイルをストリーミングで Azure Blob Storage にアップロードする方法
.NET 11 から数 GB のファイルをメモリに載せずに Azure Blob Storage へアップロードする方法。BlockBlobClient.UploadAsync と StorageTransferOptions、ASP.NET Core アップロードの MultipartReader、ペイロードを LOH に載せてしまうバッファリングの罠を解説します。
- ASP.NET Core minimal API で Native AOT を使う方法
ASP.NET Core minimal API を Native AOT で出荷するための完全な .NET 11 ウォークスルー。PublishAot、CreateSlimBuilder、ソースジェネレーター製の JSON、AddControllers の制約、IL2026 / IL3050 警告、ライブラリプロジェクト向けの EnableRequestDelegateGenerator までを扱います。
- ASP.NET Core 11 でグローバル例外フィルターを追加する方法
ASP.NET Core 11 におけるグローバル例外処理の完全ガイド: なぜ IExceptionFilter は適切なツールではないのか、IExceptionHandler と UseExceptionHandler の連携、ProblemDetails レスポンス、複数ハンドラーチェーン、そして .NET 10 の診断抑制に関する破壊的変更について解説します。
- C# と .NET 11 でカスタム MCP サーバーを構築する方法
.NET 11 / C# 14 と公式 ModelContextProtocol 1.2 SDK を使って動作する Model Context Protocol サーバーを構築します。stdio トランスポート、[McpServerTool] 属性、依存性注入、stderr ログ出力の落とし穴、そして Claude Code、Claude Desktop、VS Code への登録までカバーします。
- HttpClient を使用するコードのユニットテストを書く方法
.NET 11 における HttpClient のテスト完全ガイド: HttpClient を直接モックすべきでない理由、スタブ HttpMessageHandler の書き方、IHttpClientFactory での primary handler の差し替え、Polly のリトライ検証、WireMock.Net という選択肢。
- Aspire 13.2.4 が CVE-2026-40894 を修正: OpenTelemetry .NET の baggage ヘッダー DoS
Aspire 13.2.4 は CVE-2026-40894 に対応する OpenTelemetry の更新を含みます。baggage、B3、Jaeger プロパゲーターのパースで Gen0 のアロケーションが増幅される問題です。Aspire を使っていなくても OpenTelemetry.Api と OpenTelemetry.Extensions.Propagators を 1.15.3 に更新してください。
- dotnet-trace で .NET アプリをプロファイリングし、出力を読む方法
.NET 11 アプリを dotnet-trace でプロファイリングする完全ガイド: インストール、適切なプロファイルの選択、起動時からのキャプチャ、PerfView・Visual Studio・Speedscope・Perfetto での .nettrace の読み方。
- C# で BlockingCollection の代わりに Channels を使う方法
System.Threading.Channels は .NET 11 における BlockingCollection の async ファーストの代替です。本ガイドでは、移行方法、bounded と unbounded の選び方、そしてデッドロックなしでバックプレッシャー、キャンセル、グレースフルシャットダウンを扱う方法を示します。
- System.Text.Json でカスタム JsonConverter を書く方法
.NET 11 における System.Text.Json 用のカスタム JsonConverter<T> の完全ガイドです。本当に必要となる場面、Utf8JsonReader を正しく進める方法、JsonConverterFactory によるジェネリクスの扱い、そして AOT に優しい実装方法までを解説します。
- .NET 10 on Ubuntu 26.04: resolute コンテナータグと archive の Native AOT
Ubuntu 26.04 Resolute Raccoon は .NET 10 を archive に同梱し、-noble を置き換える -resolute コンテナータグを導入し、dotnet-sdk-aot-10.0 経由で Native AOT ツーリングをパッケージします。
- .NET 11 で OpenAPI 仕様から強く型付けされたクライアントコードを生成する方法
Microsoft 公式の OpenAPI コードジェネレーターである Kiota を使って、任意の OpenAPI 仕様から fluent で強く型付けされた C# クライアントを生成します。インストール、生成、ASP.NET Core DI への組み込み、認証設定まで順を追って解説します。
- ASP.NET Core エンドポイントからバッファリングなしでファイルをストリーミングする方法
ASP.NET Core 11 でファイル全体をメモリに読み込まずに大きなファイルを配信します。3 つのレベル: ディスク上のファイルには PhysicalFileResult、任意のストリームには Results.Stream、生成コンテンツには Response.BodyWriter -- それぞれのコード付き。
- デッドロックせずに C# の長時間 Task をキャンセルする方法
.NET 11 における CancellationToken、CancelAsync、Task.WaitAsync、リンクトークンを使った協調的キャンセル。そしてクリーンなキャンセルをデッドロックに変えてしまうブロッキングパターン。
- EF Core 11 で IAsyncEnumerable<T> を使う方法
EF Core 11 のクエリは IAsyncEnumerable<T> を直接実装しています。await foreach で行をストリーミングする方法、ToListAsync より好むべきタイミング、接続・トラッキング・キャンセルまわりの落とし穴。
- .NET 10.0.7 が ASP.NET Core Data Protection の CVE-2026-40372 を修正するために out-of-band で出荷
Microsoft.AspNetCore.DataProtection 10.0.0 から 10.0.6 の HMAC 検証不具合は攻撃者に ciphertext の偽造を許します。.NET 10.0.7 は必須の修正です。
- Visual Studio 18.5 の Debugger Agent が Copilot を生きたバグ狩りパートナーに変える
Visual Studio 18.5 GA は Copilot Chat でガイド付き Debugger Agent ワークフローを出荷し、仮説を立て、ブレークポイントを設定し、repro に同行し、ランタイム状態に対して検証し、fix を提案します。
- Agent Skills が Visual Studio 2026 18.5 に到着: Copilot がリポジトリから SKILL.md を自動検出
Visual Studio 2026 18.5.0 で GitHub Copilot は .github/skills、.claude/skills、~/.copilot/skills から Agent Skills を読み込めるようになりました。再利用可能な SKILL.md インストラクションパックがリポジトリと共に移動します。
- RyuJIT が .NET 11 Preview 3 でさらに bounds check を刈り込む: index-from-end と i + 定数
.NET 11 Preview 3 は RyuJIT に連続した index-from-end アクセスと i + 定数 < length パターンで冗長な bounds check を除去することを教え、タイトなループでの分岐圧力を削減します。
- RegexOptions.AnyNewLine が .NET 11 Preview 3 に着陸: \r? ハックなしの Unicode 対応アンカー
.NET 11 Preview 3 が RegexOptions.AnyNewLine を追加し、^、$、\Z、そして . が \r\n、NEL、LS、PS を含むあらゆる Unicode newline シーケンスを認識するようになり、\r\n は 1 つのアトミックなブレークとして扱われます。
- Aspire 13.2 --isolated: ポート衝突なしで並列 AppHost インスタンスを走らせる
Aspire 13.2 は --isolated フラグを出荷し、各 aspire run に独自のランダムポートと secrets store を与えます。マルチ checkout ワーク、エージェント worktree、ライブ AppHost を必要とする統合テストのロックを解除します。
- .NET 11 Preview 3: dotnet run -e が launch profile なしで環境変数を設定
.NET 11 Preview 3 の dotnet run -e は CLI から直接環境変数を渡し、MSBuild の RuntimeEnvironmentVariable item として公開します。
- .NET 11 Preview 3 の dotnet watch: Aspire ホスト、クラッシュリカバリー、まともな Ctrl+C
.NET 11 Preview 3 で dotnet watch が Aspire app host 統合、クラッシュ後の自動再起動、Windows desktop アプリ向けの修正された Ctrl+C 処理を得ます。
- C# でマイクロ秒レイテンシのデータベースエンジンを構築する
Loic Baumann の Typhon プロジェクトは、ref struct、ハードウェア組み込み関数、ピン留めメモリを使って 1-2 マイクロ秒の ACID コミットを目指し、C# がシステムプログラミングレベルで競争できることを証明しています。
- Dapper のデフォルト nvarchar パラメータが SQL Server のインデックスを静かに殺すしくみ
Dapper を通じて送られる C# 文字列はデフォルトで nvarchar(4000) になり、SQL Server に暗黙変換と完全なインデックススキャンを強制します。DbType.AnsiString でこれを修正する方法を紹介します。
- GitHub Copilot Modernization: アセスメントレポートが実際の製品
GitHub Copilot Modernization は、レガシー .NET アプリを移行するための Assess、Plan、Execute のループとして売り込まれています。アセスメントフェーズこそ価値の居場所です: インベントリレポート、分類されたブロッカー、コードのように diff できるファイルレベルの修正ガイダンス。
- Visual Studio 2026 の Hot Reload 自動再起動: rude edit がデバッグセッションを殺さなくなる
Visual Studio 2026 は HotReloadAutoRestart を追加します。rude edit がさもなければデバッグセッションを終わらせるときにアプリを再起動するプロジェクトレベルの opt-in です。Razor と Aspire プロジェクトに特に有用。
- EF Core 11 で 1 つのコマンドでマイグレーションを作成して適用できる
dotnet ef database update コマンドが、マイグレーションを 1 つのステップでスキャフォールドして適用するための --add を受け入れるようになりました。仕組み、コンテナと .NET Aspire にとって重要な理由、注意点を紹介します。
- EF Core 11 が DiskANN インデックスでネイティブな SQL Server ベクトル検索を追加
EF Core 11 Preview 2 は SQL Server 2025 の VECTOR_SEARCH() と DiskANN ベクトルインデックスを LINQ から直接サポートします。インデックスのセットアップ、近似クエリの実行方法、EF Core 10 の VectorDistance アプローチからの変更点を紹介します。
- Rider 2026.1 が JIT、ReadyToRun、NativeAOT 出力用の ASM ビューアを搭載
Rider 2026.1 は IDE を離れることなく JIT、ReadyToRun、NativeAOT コンパイラによって生成されたマシンコードを検査できる .NET Disassembler プラグインを追加します。
- C# 15 の union 型がここに: 型ユニオンが .NET 11 Preview 2 で出荷
C# 15 は網羅的なパターンマッチングと暗黙の変換を伴う型ユニオン用の union キーワードを導入します。.NET 11 Preview 2 で今すぐ利用可能です。
- Kestrel が .NET 11 で HTTP/1.1 パーサーから例外を捨てる
.NET 11 の Kestrel HTTP/1.1 リクエストパーサーは BadHttpRequestException を結果 struct に置き換え、不正リクエストのオーバーヘッドを最大 40% 削減します。
- Microsoft Agent Framework 1.0: 純粋な C# で AI エージェントを構築
Microsoft Agent Framework が安定した API、マルチプロバイダーコネクター、マルチエージェントオーケストレーション、A2A/MCP 相互運用性で 1.0 に到達。.NET 10 上での実際の見え方を紹介します。
2026 / 03
- dotnet/runtime での 878 件の Copilot Coding Agent PR は実際にはどう見えるか
.NET チームが GitHub の Copilot Coding Agent を dotnet/runtime で運用した 10 か月分のリアルなデータを共有: 878 件の PR、マージ率 67.9%、AI 支援の開発がどこで助け、どこで依然として不足しているかについての明確な教訓。
- Generative AI for Beginners .NET v2: Microsoft.Extensions.AI で .NET 10 向けに再構築
Microsoft の .NET 開発者向け無料生成 AI コースがバージョン 2 を出荷。.NET 10 向けに再構築され、Semantic Kernel から Microsoft.Extensions.AI の IChatClient パターンへ移行しました。
2026 / 02
- C# 14 のアイデア: インターセプターで System.Text.Json のソース生成を自動的に感じられるようにできる
コミュニティの議論で、C# 14 のインターセプターを使って JsonSerializer の呼び出しを書き換え、生成された JsonSerializerContext を自動で利用させる案が提案されました。AOT に優しいソース生成を保ちつつ、呼び出し側をきれいに保ちます。
- Polars.NET: LibraryImport に依存する .NET 10 向け Rust DataFrame エンジン
新しい Polars.NET プロジェクトが 2026 年 2 月 6 日のコミュニティ投稿の後にトレンドになっています。見出しはシンプルです。Rust Polars に支えられた .NET フレンドリーな DataFrame API で、安定した C ABI とオーバーヘッドを低く保つための LibraryImport ベースの interop を備えています。
- .NET Framework 3.5 が新しい Windows ビルドでスタンドアロン化: 何が壊れるか
Windows 11 Build 27965 から、.NET Framework 3.5 は Windows のオプションコンポーネントではなくなります。CI、プロビジョニング、ゴールデンイメージで何が壊れるか、そしてどう直すかを解説します。
- TrailBase v0.23.7: .NET 10 と Flutter にうまく合う、単一バイナリの Firebase 代替
TrailBase は Rust、SQLite、Wasmtime 上に構築されたオープンソースの単一実行ファイルバックエンドです。バージョン 0.23.7 では UI 修正とエラー処理の改善が提供されます。
2026 / 01
- NuGet の “become owner” 依頼スパム: .NET 9/.NET 10 で何をして、何をロックダウンすべきか
.NET パッケージを NuGet の所有者依頼スパムから守る方法。.NET 9 と .NET 10 のためのロックファイル、Package Source Mapping、Central Package Management の実践です。
- ASP.NET Core の Scalar: Bearer トークンが無視される理由 (.NET 10)
Postman では動く Bearer トークンが Scalar では動かない場合、原因はだいたい OpenAPI ドキュメントです。.NET 10 で適切な security スキームを宣言する方法を紹介します。
- dev ビルドを台無しにせずに TreatWarningsAsErrors を使う (.NET 10)
.NET 10 で Directory.Build.props を使い、Release ビルドと CI で TreatWarningsAsErrors を強制しつつ、ローカル開発のために Debug を柔軟に保つ方法です。
- Perfetto + dotnet-trace: .NET 9/.NET 10 のための実践的なプロファイリングループ
.NET 9 と .NET 10 のための実践的なプロファイリングループ: dotnet-trace でトレースをキャプチャし、Perfetto で可視化し、CPU、GC、スレッドプールの問題を反復的に解決する。
- WinUI 3 の "ローカル専用ノート" アプリは正しい意味で退屈: オフラインファースト、SQLite、キーボード優先
Miyanyedi Quick Note は WinUI 3 + SQLite のメモアプリで、オフラインファーストかつプライバシー重視です。「ローカル専用」が機能である理由と、.NET 8 のデスクトップアプリ向け最小 SQLite スニペットを紹介します。
- オープンソースの WPF SSH マネージャーが見せる実践的パターン: WebView2 上の xterm.js、シークレットは DPAPI で
SshManager は .NET 8 上に構築されたオープンソースの WPF SSH マネージャーです。実践的なパターンを示します: ターミナル描画は WebView2 内の xterm.js、永続化は EF Core + SQLite、ローカル認証情報の保護は DPAPI。
- CV Shortlist: AI を組み込んだ .NET 10 の SaaS がオープンソース化、スタックは学ぶ価値あり
CV Shortlist は Azure Document Intelligence と OpenAI モデルを組み合わせたオープンソースの .NET 10 SaaS です。スタック、設定の規律、AI 連携の境界は学ぶ価値があります。
- ModularPipelines V3: CI パイプラインを C# で書き、ローカルでデバッグし、YAML のお守りをやめる
ModularPipelines V3 を使えば、CI パイプラインを YAML ではなく C# で書けます。dotnet run でローカル実行、コンパイル時の安全性、ブレークポイントでのデバッグが手に入ります。
- Podman + systemd で .NET アプリをデプロイする: 安定した再起動、本物のログ、魔法なし
Linux VM 上で Podman と systemd を使って .NET 9 と .NET 10 のサービスをデプロイします。安定した再起動、journald 経由の本物のログ、そして本物のサービスのように管理されるコンテナ化アプリ -- Kubernetes は不要です。
- .NET 9 と .NET 10 でコンテナ上の gRPC が「難しい」と感じる: 修正できる 4 つの落とし穴
.NET 9 と .NET 10 でコンテナに gRPC をホストするときによくある 4 つの落とし穴: HTTP/2 のプロトコル不一致、TLS 終端の混乱、壊れたヘルスチェック、プロキシの設定ミス -- それぞれの修正方法付き。
- Microsoft `mcp`: .NET 10 上の C# から Model Context Protocol サーバーを配線する
microsoft/mcp を使って、.NET 10 上の C# で Model Context Protocol (MCP) サーバーを配線する方法。ツールの契約、入力バリデーション、認証、可観測性、そして本番運用を支えるパターンを扱います。
- Hangfire を使わずに .NET 9 と .NET 10 のバックグラウンドジョブを監視する: ヘルス + メトリクス + アラート
.NET 9 と .NET 10 で BackgroundService のジョブを Hangfire なしで監視する方法。ハートビートのヘルスチェック、所要時間メトリクス、失敗アラートを実用的なコード例とともに紹介します。
- .NET 10 のファイルベースアプリが複数ファイルのスクリプトに対応: `#:include` が登場
.NET 10 はファイルベースアプリに #:include のサポートを追加し、dotnet run のスクリプトが完全なプロジェクトを作らずに複数の .cs ファイルにまたがれるようにします。
- Docker 上の .NET の SBOM: ひとつのツールにすべてを見せようとするのはやめる
CycloneDX、Syft、Dependency-Track を使って、.NET の Docker イメージにおける NuGet 依存関係とコンテナ OS パッケージを追跡する方法。そして、ひとつの SBOM では足りない理由 --。
- System.CommandLine v2 を、配線済みで使う: `Albatross.CommandLine` v8
Albatross.CommandLine v8 は System.CommandLine v2 をベースに、ソースジェネレーター、DI 統合、ホスティング層を加え、.NET 9 と .NET 10 アプリの CLI ボイラープレートを削減します。
- 2026 年の Wave-IDE: .NET 10 の WinForms IDE を支える Roslyn の最小配管
.NET 10 上の WinForms と Roslyn だけで、動く C# IDE を作れることを Wave-IDE が示しています。インクリメンタル解析、補完、診断のための最小限の配管をまとめます。
- AWS Lambda が .NET 10 をサポート: ランタイムを切り替える前に検証すべきこと
AWS Lambda は今や .NET 10 をサポートしますが、ランタイムのアップグレードは難しい部分ではありません。ここにコールドスタート、トリミング、Native AOT、デプロイ形態をカバーする実践的なチェックリストがあります。
- .NET 10 で NIC のリストが爆発した? 自分を欺かずに GetAllNetworkInterfaces() をフィルターする
.NET 10 で Hyper-V、Docker、WSL、VPN の仮想アダプターがリストを埋め尽くしてしまうとき、GetAllNetworkInterfaces() をどうフィルターするか。トレードオフを明示した 2 段階フィルター付き。
- MongoDB EF Core プロバイダーの Queryable Encryption とベクトル検索 (.NET 9 と .NET 10 にとって何が大事か)
MongoDB EF Core プロバイダーが Queryable Encryption とベクトル検索をサポートしました。すでに EF Core を使っている .NET 9 / .NET 10 アプリにとって、それが何を意味するかを解説します。
- SwitchMediator v3: AOT に優しいまま、ゼロアロケーションのメディエーター
SwitchMediator v3 は .NET 9 と .NET 10 の CQRS サービス向けに、ゼロアロケーションかつ AOT 対応のディスパッチを目指します。それが何を意味するか、そして自分のメディエーターをどうベンチマークするかを解説します。
- .NET 10 パフォーマンス: SearchValues
.NET 10 で SearchValues を使い、高性能なマルチ文字列検索を実現します。foreach ループを Aho-Corasick および Teddy アルゴリズムによる SIMD 加速のマッチングに置き換えます。
- .NET 9 の Task.WhenEach でタスクをストリーミングする
.NET 9 は Task.WhenEach を導入し、完了したタスクの IAsyncEnumerable を返します。並列の結果を到着順に処理するのをどう単純化するかを紹介します。
- C# 13: `params` 割り当ての終わり
C# 13 はついに params の背後にある隠れた配列割り当てを解消します。Span、ReadOnlySpan、List などのコレクション型と組み合わせて、ゼロ割り当ての可変長メソッドを使えるようになります。
- .NET 9: lock(object) の終わり
.NET 9 では System.Threading.Lock が登場します。lock(object) を置き換える専用の軽量な同期プリミティブで、より高いパフォーマンスと明確な意図を提供します。
- LINQ CountBy で頻度カウントを最適化する
.NET 9 で GroupBy を CountBy に置き換え、よりクリーンで効率的な頻度カウントを実現します。中間のグルーピング構造を省くことで、割り当てを O(N) から O(K) に削減します。
2025 / 04
- .NET 10: 値型の配列のスタック割り当て
.NET 10 では、JIT が値型の小さな固定サイズ配列をスタックに割り当てられるようになり、ヒープ割り当てを排除して .NET 9 と比べて最大 60% 高速なパフォーマンスを実現します。
- .NET MAUI 10 の新機能
2025 年 11 月に .NET 10 および C# 14 とともにリリースされた .NET MAUI 10 の新機能、改善点、破壊的変更のまとめです。
- .NET MAUI で SearchBar のアイコン色を変更する方法
.NET 10 で導入された新しい SearchIconColor プロパティを使って、.NET MAUI の SearchBar のアイコン色を変更する方法。
- C# 14: ラムダで修飾子付きパラメーターをシンプルに
C# 14 では、暗黙的に型付けされたラムダパラメーターに対して ref、out、in、scoped、ref readonly の各修飾子を使用できるようになり、パラメーターの型を明示的に宣言する必要がなくなります。
- C# 14 の partial コンストラクターとイベント
C# 14 ではインスタンスコンストラクターとイベントを partial メンバーとして宣言でき、定義をファイル間で分割することで、よりすっきりしたコード生成と関心の分離を実現できます。
- C# 14: 未バインドのジェネリック型に対する nameof のサポート
C# 14 では nameof 式が拡張され、List<> や Dictionary<,> などの未バインドのジェネリック型に対応し、ダミーの型引数が不要になりました。
- C# 14 における暗黙的な Span 変換: Span と ReadOnlySpan の第一級サポート
C# 14 では Span、ReadOnlySpan、配列、文字列の間で組み込みの暗黙的変換が追加され、より整然とした API、より優れた型推論、AsSpan() の手書き呼び出しの削減が可能になります。
- .NET 10: 配列の列挙パフォーマンス改善 (JIT による配列の脱抽象化)
.NET 10 では、JIT コンパイラーがインターフェース経由で配列を反復するオーバーヘッドを削減します。foreach、IEnumerable、条件付きエスケープ解析を使った .NET 9 と .NET 10 のベンチマーク比較を見てみましょう。
- C# 14: field キーワードと field によって裏付けられたプロパティ
C# 14 はプロパティのアクセサー向けに文脈依存キーワード field を導入し、別途バッキングフィールドを宣言せずに自動プロパティへカスタムロジックを追加できるようにします。
2025 / 01
- .NET のパフォーマンス: ToList vs ToArray
.NET 9 は InlineArray を活用して ToArray のパフォーマンスを大幅に改善し、ToList より高速かつメモリ効率の良いものにします。.NET 8 と .NET 9 を比較したベンチマークを参照ください。
- C# 13: 認識される任意のコレクション型で params コレクションを使う
C# 13 では params 修飾子が配列を超えて Span、ReadOnlySpan、IEnumerable、その他のコレクション型をサポートするように拡張され、ボイラープレートが減って柔軟性が向上します。
- C# 13 への切り替え方
'Feature is not available in C# 12.0' を修正し、ターゲットフレームワークを変更するか .csproj ファイルで LangVersion を設定して、プロジェクトを C# 13 に切り替える方法。
2024 / 12
- C# 14.0 の新機能
field キーワード、拡張メンバー、null 条件付き代入、暗黙的な span 変換など、C# 14.0 のすべての新機能をまとめます。
- C# 言語のバージョン履歴
C# の進化により、モダンで高パフォーマンスな言語へと変貌を遂げました。本ガイドはあらゆる主要なマイルストーンを追跡します。初期 (C# 1.0 - 1.2)。C# は 2002 年に .NET Framework の主要言語として登場しました。Java に似ていましたが、Windows 開発に焦点を当てていました。バージョン 1.2 はその後すぐに小さな...
- .NET 10 の新機能
.NET 10 の新機能: 3 年のサポートが付く LTS リリース、新しい JIT 最適化、配列の脱仮想化、スタック割り当ての改善など。
2024 / 04
- .NET 8 ToFrozenDictionary: Dictionary と FrozenDictionary の比較
.NET 8 の `ToFrozenDictionary()` を使って Dictionary を FrozenDictionary に変換し、読み取りを高速化します。ベンチマーク、使いどころ、ビルド時のトレードオフを解説します。
2023 / 11
- MAUI アプリに AdMob を追加する方法
Android と iOS の両方の .NET MAUI アプリで AdMob のバナー広告を表示する方法を、ステップバイステップのセットアップとプラットフォーム別ハンドラーの実装とともに解説します。
- .NET Aspire 入門
プロジェクト構成、サービスディスカバリー、Aspire ダッシュボードを取り上げながら、初めての .NET Aspire アプリケーションを構築するための手順を解説します。
- .NET Aspire のインストール方法 (dotnet workload install aspire)
`dotnet workload install aspire` で .NET Aspire をインストールします。Windows、macOS、Linux での .NET 8、Aspire ワークロード、Docker のセットアップ手順を解説します。
- .NET Aspire とは?
スケーラブルな分散アプリケーションを構築するためのクラウド指向フレームワーク .NET Aspire の概要を、オーケストレーション、コンポーネント、ツールの観点から解説します。
- C# リストからランダムに項目を選ぶ
.NET 8 で導入された Random.GetItems を使うと、C# でリストからランダムに項目を選択できます。実用的な例とともに動作を解説します。
- .NET でコンテナを tar.gz として発行する方法
.NET 8 のコンテナを ContainerArchiveOutputPath プロパティと dotnet publish を使って tar.gz アーカイブとして発行する方法を解説します。
- MAUI: ライブラリ内でハンドラーを登録する方法
ビルダーパターンと MauiAppBuilder の拡張メソッドを使って、.NET MAUI ライブラリの内側からビューハンドラーやサービスを登録する方法を紹介します。
- エラー対処: 'Point' には事前定義されたサイズがないため、sizeof は unsafe コンテキストでしか使えない
unsafe コンテキスト外で sizeof を Point に対して使えない C# のエラーを解決します。unsafe コードを有効化する方法と、Marshal.SizeOf を使う方法の2つを紹介します。
- C# Unsafe Accessor を使ってプライベートプロパティのバッキングフィールドにアクセスする
.NET 8 の UnsafeAccessorAttribute を使って、C# のプライベート自動プロパティの自動生成されたバッキングフィールドにリフレクションなしでアクセスします。
- C# ZIP ファイルを Stream に書き出す
.NET 8 では、ZIP ファイルをディスクに書き込まずに Stream との間で直接作成・展開できる、新しい CreateFromDirectory と ExtractToDirectory のオーバーロードが追加されました。
- .NET 8 のパフォーマンス: GetGenericTypeDefinition が 10 倍高速に
.NET 8 と .NET 7 で GetGenericTypeDefinition をベンチマークすると、ほぼ 10 倍のパフォーマンス向上が見られます。BenchmarkDotNet によるベンチマークコードと結果を紹介します。
- .NET core でスクリーンショットを撮る方法
System.Windows.Forms を使って、.NET コンソールアプリケーションからデスクトップ全体のスクリーンショットを撮る方法を解説します。Windows 限定の方法で、すべてのディスプレイをカバーします。
- C# UnsafeAccessor で readonly フィールドを更新する方法
C# で UnsafeAccessor を使って readonly フィールドを更新する方法を解説します。リフレクションのパフォーマンスペナルティのない代替手段で、.NET 8 で利用できます。
- .NET 8 のパフォーマンス: UnsafeAccessor vs. リフレクション
.NET 8 で UnsafeAccessor とリフレクションをベンチマーク。従来のリフレクションと比べて、UnsafeAccessor がいかにオーバーヘッドゼロのパフォーマンスを実現しているかを見ていきます。
2023 / 10
- C# UnsafeAccessor: リフレクションなしでプライベートメンバーにアクセス (.NET 8)
.NET 8 の `[UnsafeAccessor]` 属性を使って、プライベートフィールドの読み取りやプライベートメソッドの呼び出しをオーバーヘッドゼロで行う方法を解説します。リフレクション不要、AOT にも完全対応。
- C# 機能を experimental としてマークする方法
C# 12 から、新しい ExperimentalAttribute を使って型、メソッド、プロパティ、アセンブリを experimental としてマークできるようになりました。diagnosticId、pragma タグ、UrlFormat と組み合わせた使い方を紹介します。
- C# ref readonly パラメーター
C# の ref readonly 修飾子は、読み取り専用の参照を渡すより透明性の高い方法を提供します。in 修飾子に対して、より厳しい制約と呼び出し側からの見えやすさをどう改善するかを解説します。
- C# 配列をシャッフルするには?
C# で配列をシャッフルするいちばん簡単な方法は、.NET 8 で導入された Random.Shuffle を使うことです。配列にも Span にも、in-place で動作します。
- System.Text.Json 既存の type info resolver を変更する方法
.NET 8 で追加された WithAddedModifier 拡張メソッドを使えば、任意の IJsonTypeInfoResolver のシリアライズコントラクトを、新しい resolver をゼロから作らずに簡単に変更できます。
- HttpClient で JSON を AsyncEnumerable として取得する
.NET 8 で追加された GetFromJsonAsAsyncEnumerable 拡張メソッドは、HTTP レスポンスの JSON を IAsyncEnumerable にデシリアライズします。await foreach と組み合わせた使い方を解説します。
- JsonNode .NET 8 の API アップデート
.NET 8 で JsonNode と JsonArray に追加された新しい API、GetValueKind、GetPropertyName、GetElementIndex、ReplaceWith、ParseAsync を解説します。
- JsonNode のディープクローンとディープイコール
.NET 8 で追加された JsonNode の DeepClone() と DeepEquals() メソッドを使って、JSON ノードをディープクローンしたり比較したりする方法を解説します。
- System.Text.Json リフレクションベースのシリアライズを無効化する
.NET 8 以降、JsonSerializerIsReflectionEnabledByDefault プロパティを使って、trimmed および native AOT アプリで System.Text.Json のリフレクションベースのシリアライズを無効化する方法を解説します。
- 既存の JsonSerializerOptions に TypeInfoResolver を追加・削除する
.NET 8 で追加された TypeInfoResolverChain プロパティを使って、既存の JsonSerializerOptions に TypeInfoResolver を追加したり、そこから削除したりする方法を解説します。
- WPF ファイルダイアログでの選択を最近使った項目に追加しない
.NET 8 で AddToRecent を false に設定して、WPF のファイルダイアログでの選択が Windows エクスプローラーの最近使った項目やスタートメニューに表示されるのを防ぐ方法を解説します。
- WPF ClientGuid を使ってダイアログごとの状態を保持する
.NET 8 の ClientGuid プロパティを使って、WPF のファイルダイアログごとに、ウィンドウサイズや位置、最後に使ったフォルダーといった状態を個別に保持する方法を解説します。
- C# 12 Interceptors
.NET 8 のコンパイラーに導入された実験的機能、C# 12 の interceptors を解説します。InterceptsLocation 属性を使ってコンパイル時にメソッド呼び出しを差し替える方法を紹介します。
- WPF OpenFileDialog のフォルダーツリーを特定のフォルダーに限定する
.NET 8 の RootDirectory プロパティを使って、WPF OpenFileDialog のフォルダーツリーを特定のルートフォルダーに限定する方法を解説します。
- RDP 経由での WPF のハードウェアアクセラレーション
.NET 8 で RDP 経由の WPF ハードウェアアクセラレーションを有効化して、パフォーマンスを向上させ、リモートデスクトップでもより快適に使う方法を解説します。
- WPF Open / Select Folder Dialog (.NET 8 の OpenFolderDialog)
.NET 8 で WPF に追加された新しい `OpenFolderDialog` を使って、ユーザーにフォルダーを 1 つまたは複数選択してもらう方法を解説します。WinForms の FolderBrowserDialog を流用していた従来の方法に取って代わるものです。
2023 / 09
- Implementation type Data.AppDbContext can't be converted to service type Microsoft.AspNetCore.Identity.IUserStore
AppDbContext を IUserStore に変換できないという ASP.NET Core Identity のエラーを、identity の設定に AddEntityFrameworkStores を追加して解消する方法を解説します。
- .NET 8 インターフェース階層のプロパティをシリアライズする
.NET 8 ではインターフェース階層からのプロパティのシリアライズに対応し、宣言された変数の型に応じて、階層内のすべてのインターフェースのすべてのプロパティを含められるようになりました。
- .NET 8 非公開プロパティへのデシリアライズ
.NET 8 で、JsonInclude 属性とパラメーター付きコンストラクターを使って、JSON を非公開プロパティにデシリアライズする方法を解説します。
- .NET 8 native AOT で JsonStringEnumConverter を使う方法
.NET 8 で追加された JsonStringEnumConverter<TEnum> を使って、System.Text.Json で native AOT 対応の enum シリアライズを行う方法を解説します。
- The type or namespace name InterceptsLocationAttribute could not be found
C# interceptors の InterceptsLocationAttribute に関する CS0246 エラーを、自分で属性を定義することで解消する方法を解説します。
- .NET 8 JsonSerializerOptions を readonly としてマークする
.NET 8 で MakeReadOnly を使って JsonSerializerOptions のインスタンスを読み取り専用にする方法と、IsReadOnly プロパティでそれを確認する方法を解説します。
- .NET 8 Half、Int128、UInt128 のシリアライズ
.NET 8 の System.Text.Json は、Half、Int128、UInt128 という数値型のシリアライズに、組み込みで対応するようになりました。
- .NET 8 Memory<byte> は base64 としてシリアライズされる
.NET 8 から、Memory<byte> と ReadOnlyMemory<byte> は Base64 文字列としてシリアライズされます。Memory<int> など他の型は引き続き JSON 配列のままです。
- .NET 8 非公開メンバーを JSON シリアライズに含める
.NET 8 で JsonInclude 属性を使って、private、protected、internal なプロパティを JSON シリアライズに含める方法を解説します。
- dotnet workload clean
`dotnet workload clean` コマンドを使って、SDK や Visual Studio の更新後に残ってしまった .NET workload パックを削除する方法、いつ使うべきか、何が削除されるか、注意点を解説します。
- .NET 8 読み取り専用プロパティへのデシリアライズ
.NET 8 で setter のない読み取り専用プロパティに対して、JsonObjectCreationHandling や JsonSerializerOptions を使って JSON をデシリアライズする方法を解説します。
- .NET 8 JSON デシリアライズ時の未知のメンバーへの対応
.NET 8 で JsonUnmappedMemberHandling を使い、デシリアライズ時にマップできない JSON プロパティに対して例外をスローさせる方法を解説します。
2023 / 08
- dotnet script のインストール方法
dotnet script を使うと、.NET CLI から C# スクリプト (.CSX) を実行できます。要件は .NET 6 以降がインストールされていることだけです。dotnet-script をグローバルにインストールするには、次のコマンドを使います。スクリプトファイルを実行するには、下の例のように dotnet script <file_path> を呼び出します。新しい...
- C# プロセスの終了を待つには?
プロセスの終了を待つには WaitForExit メソッドが使えます。コードは同期的にプロセスの終了を待ち、その後で実行を再開します。例を見てみましょう。上のコードは新しい cmd.exe プロセスを開始し、timeout 5 コマンドを実行します。process.WaitForExit() の呼び出しによって、プログラムは...
- .NET 8 JsonNamingPolicy: SnakeCaseLower と KebabCaseLower (System.Text.Json)
.NET 8 で追加された `JsonNamingPolicy.SnakeCaseLower` (および SnakeCaseUpper、KebabCaseLower、KebabCaseUpper) を使い、System.Text.Json で snake_case / kebab-case の JSON をカスタムコンバーターなしでシリアライズする方法を解説します。
2023 / 06
- dotnet new api -aot: '-aot' is not a valid option
'-aot is not a valid option' エラーは、ハイフン 2 個の正しい構文 dotnet new api --aot を使うことで解消できます。
- C# でプログラミングを始める方法
Visual Studio のセットアップから、最初のプログラムを書くこと、学習リソースを見つけることまで、C# プログラミングを始めるための初心者向けガイドです。
- .NET 8 の新機能
.NET 8 は 2023 年 11 月 14 日に LTS (Long Term Support) バージョンとしてリリースされ、リリース日から少なくとも 3 年間はサポート、アップデート、バグ修正を受け続けます。例によって、.NET 8 では新しいバージョンの C# 言語、すなわち C# 12 がサポートされます。