.NET 11 トラッカー
.NET 11 のサイクル全体を 1 つのブックマークで。
このサイトでは、AI エージェントの Walter を調査、執筆、保守に使用しています。 制作と検証の方法
2026 年 11 月 2 日時点の最新リリース候補は .NET 11 RC3 です。Microsoft は 10 月 25 日に臨時セキュリティ更新として公開しました。サポートポリシーで go-live 扱いとサポート期間を確認できます。.NET 11 は STS(Standard Term Support)リリースです。.NET 8 LTS から移行する場合は、この違いを次の更新計画に反映します。
訂正、2026 年 11 月 2 日。 以前の英語版は RC2 を最新とし、.NET 8 から 11 への移行を LTS 間の更新と説明していました。索引も .NET 11 のバージョンタグに絞り、一般的な .NET タグだけで別バージョンの記事が並ばないようにしました。
リリースとランタイムの変更
RC2 については CBOR の逐次読み取りを参照してください。RC1 の例は再現可能なコンテナーイメージ、プロセスシグナル、SignalR の認証更新です。ランタイムの解説にはジェネリック仮想メソッドの非仮想化、構造体の呼び出し規約、CPU 互換性があります。
移行を計画して確認する
.NET 8 の移行チェックリストまたは .NET Framework 4.8 の移行ガイドから始めます。複数プロジェクトでは SDK の選択とパッケージの一元管理を確認します。テストランナーを変更する場合は Microsoft.Testing.Platform、終了コード 5、VSTest へのフォールバックを確認してください。
WebApplicationFactory と Testcontainers の比較では、HTTP とデータベースのどこまでを統合テストに含めるか判断できます。列挙型を文字列で保存するガイドでは、数値文字列と名前でクエリ結果が異なる理由を扱います。認証済みリクエストの追跡にはユーザー ID をログに含める方法を参照してください。
トピック索引
下の時系列索引は .NET 11 のバージョンタグを対象とします。個別のリファレンスには EF Core 11 と C# 14 があります。
インデックス (320 件)
2026 / 10
- .NET 10.0.14 が臨時リリース: Brotli 展開のバッファーオーバーフローと、再リリースされた 10 月の 2 件の CVE
2026 年 10 月 25 日の臨時リリース (.NET 8.0.33、9.0.22、10.0.14、11 RC3) で、Brotli のバッファーオーバーフロー、Linux tarball の所有権の欠陥、そして 10 月 13 日のパッチでは完全に修正されていなかった 2 件の CVE が修正されました。
- EF Core で自己参照の多対多リレーションシップ (フォロワー/フォロー中) を構成する方法
EF Core 11 で単一の User エンティティにフォロワーとフォロー中をモデル化します。規約が何を生成するか、SQL Server が結合テーブルの外部キーの片方を黙って ClientCascade に変える理由、タイムスタンプ付きの明示的な Follow 結合エンティティのマッピング方法、そしてエラー 547 や 1785 を出さずにユーザーを削除する方法を解説します。
- ASP.NET Core 組み込み OpenAPI ドキュメントでコントローラーアクションのレスポンスを null 許容にする方法
Microsoft.AspNetCore.OpenApi がレスポンスを null 許容として出力するのは、アクションが素の T? を返す場合だけです(.NET 10 では Task<T?> でも出力されません)。ActionResult<T?> と IActionResult では、.NET 10 でも .NET 11 RC2 でもこの注釈が失われます。その理由、動作確認済みの operation transformer による修正方法、そして MVC のフォーマッターも変更しない限り仕様が実態と食い違う 204 No Content の落とし穴を解説します。
- .NET でインドのラーク/クロール方式の桁区切りで数値をフォーマットする方法 (NumberGroupSizes)
en-IN カルチャを使うか NumberFormatInfo.NumberGroupSizes を [3, 2] に設定すると、C# で 123,456,789 ではなく 12,34,56,789 と出力できます。.NET 10 と .NET 11 RC1 で検証し、配列の仕組み、CurrencyGroupSizes が別である理由、欧米式の桁区切りが黙って出力されるインバリアントグローバリゼーションの落とし穴、ラーク/クロールの単位表記ヘルパーを解説します。
- ASP.NET Core で MapIdentityApi がマップする個別のエンドポイントを削除または非表示にする方法
MapIdentityApi<TUser>() は 10 個のエンドポイントをマップしますが、1 つだけ除外するスイッチはありません。.NET 11 で実測した 4 つの対処法 (OpenAPI から隠す、404 を返す、シャドウする、ルーティングから完全に削除する) と、登録を 500 エラーにする /confirmEmail の落とし穴を紹介します。
- C# の ref-safe-context とは何か、ref ローカルに対してコンパイラーはどう決めるのか
ref ローカル、再代入、scoped、ヒープとスタックを参照する Span のコンパイル検証例で C# の参照エスケープ規則を理解します。
- .NET 11 RC 2 の CborReader は CBOR ペイロードをチャンク単位で解析できます
System.Formats.Cbor 11.0.0-rc.2 は CborReader に isFinalBlock、NeedsMoreData、SlideData を追加し、ドキュメント全体をバッファリングせずにストリームから直接 CBOR をデコードできるようにします。SDK 11.0.100-rc.2 で検証済みです。
- 修正: Windows で書き込み中のファイルに対して FileInfo.Length が古いサイズを返す
FileInfo はサイズをキャッシュし、列挙では NTFS が遅延更新するディレクトリエントリを読み、さらに書き込み側が自前のバッファーにバイトを保持していることもあります。Refresh() を呼ぶか、より確実には共有ハンドルから RandomAccess.GetLength で長さを読み取ってください。
- 修正: Settings file 'DotnetToolSettings.xml' was not found in the package
ツールパッケージがインストールを実行している SDK よりも新しい .NET を対象としているか、そもそも .NET ツールではありません。新しい SDK を使うか、互換性のある tools フォルダーを持つツールのバージョンを固定するか、--framework を強制してください。
- .NET の正規表現でバランシンググループを使って、ネストした括弧とタグの対応を一致させる方法
バランシンググループ (?<name>) と (?<-name>) を使うと、.NET の正規表現のキャプチャグループをスタックとして扱えるため、1 つのパターンで任意の深さにネストした括弧や <div> タグに一致させられます。完全なパターン、スタックの仕組み、(?<inner-open>) による内側の内容のキャプチャ、そして .NET 11 RC1 で確認した注意点 (空スタックのチェック、壊滅的なバックトラック、NonBacktracking、複数種類の括弧の混在) を解説します。
- EF Core 11 のコンパイル済みモデルとは何か、有効にする価値があるのはどんなときか
コンパイル済みモデルとは、OnModelCreating を実行せずに EF Core のモデルを再構築する生成済み C# コードです。EF Core 11 RC1 での実測では、500 エンティティでモデルの読み込みが 714 ms から 215 ms に短縮されます。ただし EFOptimizeContext の後継である MSBuild 経由の方法は遅く、古くなったモデルはエラーなしで使われ続け、クエリフィルターがあると生成そのものができません。
- 透過的な構造体レイアウトとは何か、そして単一フィールドのラッパー構造体が .NET の呼び出し規約を変えるのはなぜか
透過的な構造体とは、ABI が唯一のフィールドとまったく同じように扱う構造体のことです。.NET 11 にはその保証がありません。double をラップした構造体は、Windows x64 では RCX で渡されますが、Linux と macOS では XMM0 で渡されます。本記事では、3 つの ABI での .NET 11 JIT の逆アセンブル結果、それが引き起こす P/Invoke のバグ、そしてあらゆる境界で安全なラッパー型の書き方を示します。
- EF Core 11 の shadow プロパティとは何か、なぜマイグレーションに現れたのか
shadow プロパティは、対応する CLR プロパティがないまま EF Core が追跡する列です。EF Core 11 がそれを作る理由 (FK プロパティの欠落、FK の命名ミス、型の不一致、リレーションシップの二重構成)、マイグレーションで BlogId1 のような列を見つける方法、原因ごとの修正方法、そして意図的に shadow プロパティを使う方法を解説します。
- EF Core のクエリを並列実行するための AddDbContextPool と AddDbContextFactory の比較
AddDbContextPool は DI スコープごとに 1 つのスコープ付き DbContext を渡すため、2 つのクエリを同時に実行できません。AddDbContextFactory と AddPooledDbContextFactory は呼び出しごとにコンテキストを返すので、並列クエリに向いています。EF Core 11 RC 1 での計測では、プール付きファクトリはコンテキストを 342 ns、40 B で作成しますが、プールなしでは 17 us、44 KB かかります。
- C# Dev Kit 11.0 は 6 つのプロセスを 1 つの Native AOT バイナリに統合しました
C# Dev Kit 11.0 のプレリリースでは、6 つのマネージドプロセスが単一の Native AOT 製 CSDevKit プロセスと永続的なプロジェクトキャッシュに置き換わりました。407 プロジェクトの Aspire ソリューションが、84.1 秒ではなく 3.0 秒で使えるようになり、メモリ使用量も 2,072 MB から 316 MB に減りました。
- 修正: C# 15 の union 型に対して網羅的な switch で CS8509 または CS0161 が出る場合
.Value ではなく union の値そのものに対して switch し、switch 式を使うか、switch 文には case null を追加します。switch 式は警告で済む null の網羅が、switch 文では必須になります。
2026 / 09
- 修正: commandName: Executable のプロファイルで launchSettings.json の環境変数が無視される
Executable プロファイルが dotnet run や dotnet watch を実行する場合、内側のコマンドが既定のプロファイルを適用し、設定した変数を上書きします。--no-launch-profile を追加し、SDK 10.0.200 以降を使ってください。
- .NET 11 RC1 の Blazor にエージェント型 UI コンポーネントが登場: ChatPage、UIAgent、ツール承認
Microsoft.AspNetCore.Components.AI は .NET 11 RC1 の実験的な Blazor パッケージです。任意の IChatClient を、ツール承認、型付きツール表示、AG-UI 経由の共有状態を備えたストリーミングチャット UI に変換します。
- 修正: カスタムローカルドメインで dotnet watch の Blazor ホットリロード WebSocket が失敗する (403)
2026年9月の .NET SDK (10.0.112、10.0.401、11 RC1) 以降、dotnet watch は未知のオリジンからのブラウザー更新用 WebSocket を拒否します。DOTNET_WATCH_AUTO_RELOAD_WS_ORIGINS にホスト名を設定してください。
- EF Core 11 で JSON にマッピングされたプロパティに一意インデックスを追加する方法 (SQL Server と SQLite)
EF Core 11 RC 1 では、ToJson() メンバーに対する HasIndex(...).IsUnique() は一意性を強制しません。SQL Server は IsUnique を無視し、SQLite はドキュメント全体にインデックスを張ります。JSON の値を計算列として公開し、その列に一意インデックスを設定してください。
- 修正: IConfiguration.Bind が appsettings.json から配列や List<T> プロパティに値を設定しない
バインダーは、public setter のない配列プロパティ、get のみの IReadOnlyList<T>、フィールド、そしてソースジェネレーター使用時の init 専用メンバーを黙ってスキップします。さらに既定値を置き換えずに追記します。.NET 10.0.12 と 11 RC 1 で計測しました。
- System.Text.Json で Vector3 や Quaternion などの public フィールドをシリアル化する方法
Vector3 や Quaternion はデータを public フィールドに保持しているため、System.Text.Json は Vector3 を {}、Quaternion を {"IsIdentity":false} として書き出します。IncludeFields、カスタムコンバーター、リゾルバーの修飾子、ソース生成でこれを解決する方法を、.NET 10 と .NET 11 RC 1 で計測しながら解説します。
- ASP.NET Core 11 で単一の minimal API フォームエンドポイントだけ antiforgery 検証を無効化する方法
対象のエンドポイント、または MapGroup に .DisableAntiforgery() を付けます。ASP.NET Core 11 ではこれ 1 つでトークンミドルウェアと新しい自動 CSRF チェックの両方から除外されます。実測したマトリクス、優先順位の落とし穴、より範囲の狭い代替手段を解説します。
- IPluralizer で dotnet ef dbcontext scaffold のテーブル名複数形化をカスタマイズする方法
Gas という名前のテーブルは Ga というエンティティにスキャフォールドされます。組み込みの Humanizer 複数形化サービスを独自の IPluralizer に置き換え、スタートアッププロジェクトの IDesignTimeServices から登録する方法と、そこで TryAddSingleton が黙って何もしない理由を解説します。
- 2 つのアプリインスタンスが同じメッセージを消費するときに EF Core 11 で冪等なメッセージ処理を保証する方法
ハンドラーの存在チェックは、あなたが思っているようなガードではありません。inbox テーブルに一意インデックスを張り、業務上の変更と同じ SaveChanges でマーカーを書き込み、勝者はデータベースに決めさせます。さらに、それを静かに台無しにする ExecuteUpdate の罠も扱います。
- 1 つの ASP.NET Core リクエストの中でデータベース書き込みと Azure Blob Storage へのアップロードの整合性を保つ方法
SQL Server と Blob Storage をまたぐトランザクションは存在しません。データベースが既に知っている名前にアップロードし、コミットは後から行い、失敗時には補償し、クラッシュの隙間はスイーパーに片付けさせます。条件付き作成を黙って上書きに変えてしまう UploadAsync のオーバーロードについても。
- EF Core 11 のマイグレーションで主キー、外部キー、インデックスにカスタム命名規則を適用する方法
EF Core 11 が生成する PK_、FK_、AK_、IX_ の名前を 1 つの IModelFinalizingConvention ですべて付け替え、明示的に指定した名前を優先させ、識別子の長さ制限に収め、既存データベースで次のマイグレーションが生成するクラスター化インデックスの再構築を回避します。
- EF Core 11 の生成 id エスケープ変更後に EF Core Cosmos アプリを移行する
EF Core 11 は Cosmos DB の生成 id 値に含まれる '/', '\', '?', '#' をエスケープしなくなったため、EF Core 8-10 で書き込んだドキュメントがキーで解決できなくなります。影響を受けるかどうかの確認方法、EscapeIllegalCosmosIdCharacters スイッチを設定すべき場面、そしてトランザクションバッチで id を安全に書き換える方法を解説します。
- .NET 11 における Microsoft.Data.SqlClient と System.Data.SqlClient の比較
Microsoft.Data.SqlClient を使ってください。System.Data.SqlClient は非推奨で、触れる型すべてに CS0618 が出ます。さらに .NET 8 が 2026-11-10 にサポート終了を迎えると .NET 向けアセットが削除されます。その日は .NET 11 のリリース日でもあります。実測した機能差、マイグレーションを壊す Encrypt の既定値、そして 7.0 でのパッケージ分割について解説します。
- .NET 11 の Process.Run と Process.Start: どちらを使うべきか
ツールを起動して終了の仕方だけが気になるなら Process.Run を使います。1 回の呼び出しで済み、タイムアウトで子プロセスを強制終了し、シグナルを含む ProcessExitStatus を返します。stdin への書き込み、出力を届いたそばから読む処理、UseShellExecute、プロセスツリー全体の強制終了など、Process オブジェクトが必要な場合は Process.Start を使い続けます。
- .NET 11 の JIT がジェネリック仮想メソッドを非仮想化し、アロケーションも一緒に消える
Stephen Toub の Performance Improvements in .NET 11 では、ジェネリック仮想メソッド呼び出しが 6.7 ns / 24 バイトから 1.8 ns / アロケーションゼロまで下がっています。3 本の RyuJIT のプルリクエストが、.NET で最も不透明だったディスパッチのインライン化を可能にしました。
- SQL Server 互換性レベル 150 vs 160: EF Core 11 のクエリで何が変わるのか
EF Core 11 では UseSqlServer の既定の互換性レベルが 160 になり、LEAST、GREATEST、2 引数の LTRIM/RTRIM が SQL に入るようになりました。すべての Take(n).FirstOrDefault() も対象です。SQL Server 2022 以降なら 160 のままにし、SQL Server 2019 がまだ動いている環境が一つでもあれば UseCompatibilityLevel(150) で固定してください。
- 修正方法: EF Core の更新後に発生する Could not load file or assembly 'Microsoft.Data.SqlClient, Version=7.0.0.0'
EF Core 11 は Microsoft.Data.SqlClient 7.0.0.0 に対してコンパイルされていますが、リストアまたはデプロイで 6.x のコピーが採用されてしまっています。古い SqlClient の固定指定を削除し、出力全体を再デプロイしてください。
- .NET 11 の ZipArchive 非同期 API で ZIP ファイルを非同期に作成・展開する方法
ZipFile.CreateFromDirectoryAsync、ExtractToDirectoryAsync、ZipArchive.CreateAsync、ZipArchiveEntry.OpenAsync を、隠れた同期 I/O なしで使う方法を解説します。.NET 11 RC 1 と .NET 10.0.12 で計測し、今も Kestrel をブロックする .NET 10 のバグも取り上げます。
- ASP.NET Core 11 の Minimal API で [AsParameters] を使って複雑なクエリ文字列オブジェクトをバインドする方法
クラスやレコードに [AsParameters] を付けると、ASP.NET Core 11 の Minimal API でクエリ文字列のフィルター全体をバインドできます。既定値、配列、enum、入れ子のオブジェクト、検証、OpenAPI、そして位置指定レコードで発生する Native AOT ジェネレーターのバグを解説します。
- .NET MAUI Android のリリースビルドで R8 の縮小と難読化を有効にする方法
AndroidLinkTool を r8 に設定し、トリミングを有効のままにして、ProguardConfiguration ファイルを追加します。.NET 10 と .NET 11 RC 1 がいまだに難読化されていない Java を出力する理由、新しい AndroidR8ObfuscationMode プロパティがそれをどう変えるか、そして R8 が実際に実行されたことを確認する方法を解説します。
- .NET MAUI Shell のルートページで Android の戻るボタンをインターセプトする方法
ルートページで OnBackButtonPressed をオーバーライドし、.NET MAUI 10.0.101 以降を使います。ルートページが 10.0.70 (Android 16) と 10.0.100 (すべての Android バージョン) から戻る操作を受け取らなくなった理由、.NET 11 RC 1 がまだ影響を受ける理由、Shell.OnNavigating と BackButtonBehavior.Command が役に立たない理由、そして問題のあるバージョン向けの MainActivity での回避策を解説します。
- .NET 11 RC 1 で dotnet publish のコンテナーイメージが再現可能になります
.NET 11 RC 1 の SDK は、コンテナーイメージの発行時に SOURCE_DATE_EPOCH を尊重し、レイヤーの tar ヘッダーからプロセス ID を取り除き、レジストリにマニフェストが既に存在する場合は blob のアップロードを省略します。同じコミットからは同じダイジェストが得られます。
- EF Core 11 で EF.Functions.Like と StartsWith クエリの % と _ ワイルドカードをエスケープする方法
EF Core 11 では StartsWith、EndsWith、Contains が % と _ を自動でエスケープしますが、EF.Functions.Like はエスケープしません。EF が生成する SQL、再利用できるエスケープヘルパー、そして SQL Server、SQLite、PostgreSQL で正しく動作させるための escapeCharacter オーバーロードを解説します。
- EF Core 11 で SQL Server に JSON を保存するときのネイティブ json 列と nvarchar(max) の比較
SQL Server 2025 と Azure SQL ではネイティブの json 型を使いましょう。EF Core 11 はそこから JSON_CONTAINS、型付きの JSON_VALUE、インプレースの modify()、JSON インデックスを引き出せます。SQL Server 2019/2022、レガシーなツール、あるいはロールバックできる必要があるスキーマの場合は nvarchar(max) のままにしてください。
- C# で重複キーを扱うなら Lookup<TKey, TElement> か Dictionary<TKey, List<TValue>> か
一度グループ化して読むだけなら ToLookup を使います。不変で、存在しないキーには空のシーケンスを返し、null キーを受け付け、最初に現れた順序を保ちます。構築後にグループが変化する場合や JSON の境界をまたぐ場合は Dictionary<TKey, List<TValue>> を使います。
- ASP.NET Core 11 の C# ユニオン: ボディ、SignalR、OpenAPI は動き、クエリ文字列は動かない
ASP.NET Core チームが、.NET 11 で C# 15 の union 型がどこで使えるかを整理しました。Minimal API と MVC のボディ、SignalR の JsonHubProtocol、Blazor、OpenAPI の anyOf スキーマです。ルート、クエリ、ヘッダー、フォームからのバインドはまだサポートされていません。
- .NET 11 RC 1 の SignalR は接続を切らずに期限切れ間近のトークンを差し替えます
SignalR の認証リフレッシュ API が .NET 11 RC 1 で確定しました。HubConnection 上に改名されたコールバック、TypeScript クライアント、そして更新後の ClaimsPrincipal を自動で取り込む Blazor Server の回線が含まれます。
- .NET 11 RC 1 では P/Invoke なしで子プロセスに SIGTERM を送れます
.NET 11 RC 1 で Signal、WaitForExitStatus、ProcessExitStatus が System.Diagnostics.Process に直接追加され、子プロセスのグレースフルな停止に kill の P/Invoke も SafeProcessHandle 経由の迂回も不要になりました。
- ASP.NET Core を参照せずに型付き HttpClient から RFC 9457 の ProblemDetails レスポンスを読み取る方法
BCL に ProblemDetails 型は存在せず、Microsoft.AspNetCore.App への FrameworkReference を追加すると、ランタイムだけのコンテナーでクライアントが起動を拒否します。仕事をこなす 20 行のモデル、problem+json を型付き例外に変える DelegatingHandler、そして今なお多くの回答が繰り返している content-type の神話を扱います。
- .NET MAUI の Android アプリで ANR を引き起こす async void ハンドラーを見つける方法
Play Console は ANR 率が 0.47% を超えたと伝え、libcoreclr.so のフレームだらけのネイティブスタックトレースを渡してきます。その役に立たないトレースから、メインスレッドをブロックした async void イベントハンドラーそのものへたどり着く方法を、Looper の printer、状態マシン名を出す SynchronizationContext ラッパー、dsrouter 経由の dotnet-trace で解説します。
- EF Core 11 で UPDLOCK と SELECT ... FOR UPDATE を使って悲観的ロックを取る方法
EF Core 11 にはいまだにロック用の API がありません。FromSql で実際の行ロックを取る方法を解説します。SQL Server では WITH (UPDLOCK, ROWLOCK)、PostgreSQL では FOR UPDATE、ロック範囲を静かに広げてしまうサブクエリの罠、NOWAIT と SKIP LOCKED、デッドロックのリトライ、そして行がまだ存在しない場合の対処法まで。
- データベースの null をコード上の非 null 値へ変換する EF Core 11 の value converter の書き方
EF Core はデフォルトでは value converter に null を渡しません。それを変える内部 API の convertsNulls コンストラクター、依存する IsRequired(false) の呼び出し、enum などの値型でどうしても機能しない理由、生まれてしまう WHERE col = NULL の罠、そして内部 API を使わずに目的を果たす 2 つのパターンを解説します。
- Blazor のレンダーモードとは何か、どれが自分のコンポーネントを実行しているのか
レンダーモードは Razor コンポーネントがどこで実行され、インタラクティブになるかどうかを決めます。.NET 11 の 4 つのモード、コンポーネントが何を継承するかを決める伝播ルール、そして実行時にどのモードが適用されたかを教えてくれる RendererInfo と AssignedRenderMode を解説します。
- EF Core のインターセプターとは何か、どんなときに必要か
EF Core のインターセプターは、コマンドの実行や SaveChanges といった操作の前後で EF が呼び出すクラスで、観察するだけでなく操作を変更したり抑制したりできます。EF Core 11 の 7 つのインターセプトポイント、登録とライフタイムの規則、そしてクエリフィルターやログ出力のほうが適している場面をまとめます。
- .NET MAUI の Android アプリを API レベル 36 ターゲットに移行する
Google Play は 2026-08-31 からターゲット API レベル 36 を必須にし、延長は 2026-11-01 までです。net9.0-android から API 36 までの .NET MAUI の移行手順をすべて解説します。target framework の変更、古いレベルに静かに固定してしまう uses-sdk、オプトアウトできなくなった edge-to-edge、予測型の戻る操作、そして大画面のルールまで。
- .NET の W^X フラグとは何か、Native AOT はそれを必要とするのか?
W^X (write xor execute) は、いかなるメモリページも書き込み可能と実行可能を同時に満たさないという規則です。.NET では DOTNET_EnableWriteXorExecute というノブとして公開され、.NET 7 以降は既定で有効で、その存在理由はもっぱら JIT にあります。Native AOT はこのノブを一度も読みません。ランタイムがどう実装しているか、何を犠牲にするか、そして無効化が正当な対処になるのはどんなときかを解説します。
- .NET 11 で .NET MAUI の Android アプリを Mono から CoreCLR へ移行する
Android 向け .NET MAUI を Mono から CoreCLR へ移行する手順ガイドです。API 24 という下限、ビルドを壊すようになった Mono 専用の MSBuild プロパティ、APK が大きくなった理由、dotnet-dsrouter と dotnet-trace による起動リグレッションのプロファイリング、そして Mono の経路が失われた今のロールバックの実態を扱います。
- .NET 11 SDK で VSTest から Microsoft.Testing.Platform へ移行する
VSTest から Microsoft.Testing.Platform 2.3.3 への手順ごとの移行ガイドです。OutputType Exe によるオプトイン、global.json でのランナー切り替え、ロガーからレポーターへの改名、.runsettings から testconfig.json への置き換え、そして緑だった CI ジョブを赤にする終了コードを扱います。
- モダンな .NET で削除された BinaryFormatter からの移行
BinaryFormatter の実装は .NET 9 で削除され、.NET 10 と .NET 11 でも PlatformNotSupportedException をスローし続けます。代替シリアライザーの選び方、NrbfDecoder による永続化済み NRBF ブロブの読み取り、WinForms・WPF・ResX で壊れるものを解説します。
- .NET 11 のコンテナーイメージにおける framework-dependent と self-contained と Native AOT の比較
ASP.NET Core サービスを .NET 11 で動かすなら、chiseled な aspnet イメージ上の framework-dependent が正しい既定です。ランタイムのレイヤーがサービス間で共有され、ランタイムの CVE はベースイメージの差し替えだけで塞げるからです。self-contained + トリミングと Native AOT はイメージを 2 倍から 5 倍小さくし、コールドスタートを大幅に速くしますが、その代わりに前述の利点を失います。実測された公開サイズ、共有レイヤーの計算、そして AOT の経路を壊す .NET 11 のベースイメージ推論バグを扱います。
- テストプロジェクトを xUnit v2 から xUnit v3 に移行する (2.9.3 から 4.0.0 へ)
xunit 2.9.3 から xunit.v3 4.0.0 への段階的な移行手順です。パッケージの入れ替え、OutputType を Exe にする変更、ValueTask を返す IAsyncLifetime、Xunit.Abstractions の廃止、そして何も一致しなくなったことを黙って隠す CI のフィルター構文を扱います。
- C# のリポジトリメソッドで Task を直接返す vs async/await でパススルーする: どちらを使うべきか
リポジトリのパススルーメソッドで async/await を省略すると約 6 ns と 72 バイトを節約できますが、スタックフレーム、try/catch のセマンティクス、安全なリソース破棄を失います。計測済みのホットパス上の純粋なパススルーでない限り、return await を残してください。
2026 / 08
- Fix: EF Core の並行 INSERT で発生する 23505: duplicate key value violates unique constraint
ハンドラーの「確認してから挿入」はアトミックではありません。SqlState 23505 の PostgresException を捕捉するか、全体を 1 つの INSERT ... ON CONFLICT 文にまとめてください。EnableRetryOnFailure は役に立ちません。
- 解決: dotnet ef database update 実行時の CREATE DATABASE permission denied in database 'master'
EF Core の Migrate() は常にデータベースの存在を確認し、なければハードコードされた master 接続で作成します。CREATE ANY DATABASE を付与するか、既存データベースへのログインのアクセスを直すか、冪等な SQL スクリプトを配布してください。
- Fix: .NET MAUI の Android アプリをインストールすると Doesn't support required ABI になる
APK に端末の CPU 向けのネイティブライブラリが入っていないのが原因です。.NET 9 以降、Android の RuntimeIdentifiers の既定値は 64 ビットのみになったため、RuntimeIdentifiers を明示的に指定して解決します。ADB0020、XA0036、NETSDK1083、ABI と RID の対応、Play Console の文言、そして誰もがコピーする 4 つの RID のスニペットが .NET 11 で壊れる理由を扱います。
- 解決: failed to resolve source metadata for mcr.microsoft.com/dotnet/aspnet
BuildKit がベースイメージのマニフェストを読めていません。タグの存在確認、Docker credential helper の修復、MCR の 2 つのエンドポイント開放、オフラインビルド向けの事前 pull を順に確認します。
- Aspire 13.5 はダッシュボードの中に本物のターミナルを載せる
WithTerminal() はリソースに対話的な PTY セッションを与え、ダッシュボードから直接入力したり、自分のシェルからアタッチしたりできます。実験的機能であり、デバッガーは自動接続されず、以前あった Shell オプションは削除されました。
- ASP.NET Core の UseExceptionHandler が 413 を 500 に変えなくなります
2026-08-19 に dotnet/aspnetcore の main へ取り込まれた PR により、ExceptionHandlerMiddleware は BadHttpRequestException.StatusCode を 500 で上書きせず尊重するようになります。
- 修正: minimal API で [FromForm] Dictionary<string, string> が常に null になる
minimal API の [FromForm] Dictionary は空のプレフィックスでバインドされるため、フォームキーは metadata[key] ではなく [key] にする必要があります。クラスで包めば読みやすい名前を保てます。
- 修正: Swashbuckle.AspNetCore を v9 に更新すると OpenAPI 3.0 を出力できない
Swashbuckle 8 以降は openapi 3.0.1 ではなく 3.0.4 を出力し、パッチバージョン用の OpenApiSpecVersion は存在しません。変更の理由と、ツールが期待する文字列に固定する 4 つの方法を解説します。
- .NET 11 へのアップグレード後に Swagger UI が Unable to render this definition と表示される問題の解決
ASP.NET Core 11 は既定で openapi 3.2.0 を出力し、10.1.5 未満の Swagger UI はこれを拒否します。Swashbuckle.AspNetCore.SwaggerUI を更新するか、OpenApiVersion を OpenApi3_1 に固定してください。
- .NET 11 Preview 7 で MSBuild サーバーがデフォルトで有効になりました
Preview 7 で MSBuild サーバーがオプトインからデフォルト有効に変わり、連続する dotnet build や dotnet test が温まったワーカープロセスを再利用するようになりました。何が変わったのか、無効化する方法、そしてサーバーが実際に使われたかを確認する方法を説明します。
- EF Core 11 で insert 時にデータベースのシーケンスから主キーを生成する方法
EF Core 11 の UseSequence でキーを IDENTITY から SQL Server のシーケンスへ移す方法です。EF が実際に発行する SQL、明示的なキー値が IDENTITY_INSERT なしで通るようになる理由、int 列に bigint シーケンスをつないでしまう罠、そして設計時に見込んでおくべき欠番を扱います。
- JavaScript 相互運用なしで Blazor コンポーネントからファイルをダウンロードする方法
downloadFileFromStream の JS モジュールは不要です。TypedResults.File を返す minimal API エンドポイントを指す download 属性付きのアンカーをレンダリングするか、AntiforgeryToken を含むプレーンな HTML フォームを POST します。download 属性が Blazor の拡張ナビゲーションによるクリック横取りを防ぐ理由、data-enhance がファイルを黙って捨てる理由、cookie と bearer の落とし穴も解説します。
- Blazor のシングルトンサービスから IDbContextFactory<T> を使う方法
シングルトンは DbContext を注入できませんが、IDbContextFactory<T> なら注入できます。AddDbContextFactory がファクトリを既定でシングルトンとして登録するからです。呼び出しごとにコンテキストを生成して破棄し、インスタンスは決して保持しないでください。
- .NET 11 Preview 7 で System.IO.Compression がついに暗号化 ZIP を読み書きします
.NET 11 Preview 7 は System.IO.Compression にパスワード保護された ZIP エントリを追加します。AES-256 のサポート、ディレクトリ全体を扱う操作向けのオプション型、そして main では既に修正済みの空ファイルの不具合について解説します。
- ASP.NET Core 11 の OpenAPI ドキュメントにおける Scalar と Swagger UI の比較
Scalar は gzip 圧縮後 1.02 MiB の JavaScript と、はるかに優れたリクエストビルダーを配信します。Swagger UI は 514 KiB で、.NET 11 が既定で出力する OpenAPI 3.2 をレンダリングします。実測したペイロード、3.2 対応の差、両者のエンドポイントルーティング、そして決め手になる認証まわりの詳細をまとめます。
- .NET 11 のレスポンス圧縮における Zstandard と Brotli と Gzip の比較
.NET 11 の動的な API レスポンスには Zstandard が正しい既定値ですが、ASP.NET Core のプロバイダーが出荷時に設定している品質のままではいけません。実際の JSON ペイロードを使ったベンチマークで、品質 1 が既定の品質 3 をサイズと CPU の両方で上回る理由、Brotli が今も勝つ場面、そして Gzip が互換性のためのフォールバックとしてのみ残る理由を示します。
- Blazor Server のサーキットがタブのアイドル時に自動で一時停止するようになりました
.NET 11 Preview 7 では、ブラウザーのタブが非表示になったときに対話型 Server サーキットを一時停止するオプトインのパッケージが追加され、実際にはいないユーザーが抱え込んでいたメモリと SignalR 接続が解放されます。
- 解決: 新しい .NET SDK をインストールした後に blazor.server.js が 404 Not Found になる
.NET 10 では Blazor スクリプトが埋め込みリソースではなくなったため blazor.server.js が 404 になります。ホストプロジェクトに RequiresAspNetWebAssets を追加するか、.razor ファイルを置いてください。
- .NET 11 Preview 7 で C# 15 にラベル付き break と continue が追加されました
ラベル付き break と continue が .NET 11 Preview 7 の C# セクションに入りました。ループにラベルを付けて直接ジャンプできるようになり、入れ子のループで使っていた bool フラグや goto の回避策が不要になります。
- 修正: dotnet tool install --global dotnet-ef がエラーを出す
.NET 10 SDK で dotnet tool install --global dotnet-ef が失敗するすべてのパターンを、正確なメッセージと終了コード付きで解説します。インストール済み、バージョンが見つからない、ダウングレード拒否、shim の衝突、到達できない NuGet フィード、そしてインストール成功後に初めて壊れるランタイム不一致。
- 解決: The 'interceptors' feature is not enabled in this namespace
CS9137 は Microsoft.AspNetCore.OpenApi のソースジェネレーターが原因です。PackageReference を持つプロジェクトだけでなく、AddOpenApi を呼び出すすべてのプロジェクトに InterceptorsNamespaces を追加してください。
- 解決: The type or namespace name 'OpenApiReference' could not be found
OpenApiReference は Microsoft.OpenApi 2.0 で削除されました。using を Microsoft.OpenApi に変えるだけでは不十分で、各箇所を OpenApiSchemaReference のような型付き参照に置き換えます。
- EF Core 11 でストアドプロシージャを呼び出して結果をマッピングする方法
プロシージャがエンティティの全列を返す場合は DbSet の FromSql、射影を返す場合は Database.SqlQuery<T>、何も返さない場合は ExecuteSql を使います。EXEC に LINQ 演算子を連結してはいけません。また、リーダーが破棄される前に出力パラメーターを読んではいけません。
- ソース生成された System.Text.Json のシリアル化を type info resolver のモディファイアーでカスタマイズする方法
.NET 11 でソース生成された JsonSerializerContext に JsonTypeInfo のモディファイアーを付ける方法です。new MyContext(options) が黙って破棄する理由、動作する WithAddedModifier の構成、失う高速パス(実測値つき)、そしてモディファイアーを無効化する命名ポリシーの落とし穴を扱います。
- Aspire が登録する既定のレジリエンスハンドラーを上書きする方法
Aspire の AddServiceDefaults はすべての HttpClient に標準レジリエンスハンドラーを適用します。AddStandardResilienceHandler をもう一度呼んでも置き換えにはならず、2 つ目のハンドラーが積み重なります。実際に上書きする 3 つの方法、どこにも書かれていないオプション名 -standard、そして単に削除しただけで引き継いでしまう無限タイムアウトを解説します。
- EF Core 11 のマイグレーションでデータを失わずにテーブル名を変更する方法
テーブル名を変更した場合、EF Core は RenameTable を生成しますが、エンティティクラスの名前を変更した場合は DropTable と CreateTable を生成します。この2つを見分ける方法、クラス名変更のコストをゼロにする ToTable のテクニック、そしてデータを黙って入れ替えてしまう列名変更のバグを解説します。
- .NET 11 で `dotnet run app.cs` を使ってファイルベース C# アプリを実行する方法
ファイルベース C# アプリの完全ガイド。dotnet run による単一 .cs ファイルの実行、#:package、#:sdk、#:property、#:project、#:include の各ディレクティブ、#:ref による複数ファイル構成のスクリプト、引数と stdin の扱い、ビルドキャッシュ、native AOT での発行、dotnet ツールとしてのパッケージ化、そしてスクリプトが手狭になったときの dotnet project convert を解説します。
- ASP.NET Core 11 で Swagger UI の代わりに Scalar で OpenAPI ドキュメントを提供する方法
ASP.NET Core 11 で UseSwaggerUI を MapScalarApiReference に置き換えます。ルーティング、複数ドキュメント、認証情報の事前入力、本番環境での制御、CDN 不要のアセット、そして Scalar 固有の OpenAPI 拡張を解説します。
- 解決: Blazor Server の circuit が切断された後の Attempting to reconnect to the server
再接続モーダルはアプリがクラッシュしたのではなく、SignalR の circuit が切れたという合図です。再試行が failed で終わるか rejected で終わるかを確認し、セッションアフィニティ、3 分の保持期間、32 KB 制限を直すか、[PersistentState] で状態を保存してください。
- .NET 11 のサービス間呼び出しにおける gRPC vs REST vs SignalR
.NET 11 の内部サービス間呼び出しでは、契約の両端を自分たちで所有していて呼び出しがポイントツーポイントであれば、既定で gRPC を選んでください。自分たちが管理していないものがそのサービスを呼び出す必要が出た時点で、JSON を使う REST に切り替えます。SignalR はサービス間の RPC トランスポートではありません。1 つの生産者が多数の長寿命な消費者へメッセージを配信する必要がある場合にのみ使ってください。
- 修正: C# で Task.WhenAll を待機したときの AggregateException "One or more errors occurred"
await Task.WhenAll は失敗のうち 1 つしか再スローしません。WhenAll のタスクを変数に保持し、Exception.InnerExceptions を読めばすべてのエラーを確認できます。
- 解決: IIS へのデプロイ後に発生する HTTP Error 500.30 - ASP.NET Core app failed to start
500.30 は、アプリが w3wp.exe の中で起動中に例外をスローしたという意味です。実際の例外は Windows のアプリケーション イベント ログに IIS AspNetCore Module V2 として既に記録されています。まずそれを読み、次に原因を順に絞り込みます。共有フレームワークの未インストール、アプリケーション プールの x86/x64 不一致、構成の欠落、プールの権限です。
- EF Core 11 で rowversion トークンを使って楽観的同時実行制御を実装する方法
EF Core 11 に rowversion の同時実行トークンを追加します。[Timestamp] と IsRowVersion による設定、EF が実際に発行する SQL、DbUpdateConcurrencyException の捕捉、データベース優先 vs クライアント優先 vs マージ、ETag を使った切断された API、そして保護を無言で無効化する 5 つの落とし穴。
- EF Core 11 で value converter を使って enum を文字列として保存する方法
EF Core 11 で C# の enum を int ではなく読みやすい文字列として保存する方法です。HasConversion、すべての enum への一括設定、nvarchar(max) の罠、並び順の落とし穴、既存の int 列の移行手順を扱います。
- .NET 11 で IValidateOptions<T> を使って起動時にオプションを検証する方法
IValidateOptions<T> を実装し、DI に登録して ValidateOnStart をチェーンすれば、不正な appsettings.json は最初にそれに触れたリクエストではなくプロセスそのものを落とします。.NET 11 の Validate<TValidator>() オーバーロード、IAsyncValidateOptions<T> による非同期検証、そして ValidateOnStart が黙って何もしない 3 つのケースを解説します。
- ASP.NET Core 11 で Kestrel に HTTP/3 を配信させる設定方法
ASP.NET Core 11 で Kestrel の HTTP/3 を有効にするための完全ガイドです。HttpProtocols.Http1AndHttp2AndHttp3 によるエンドポイント設定、Windows / Linux / macOS における MsQuic のプラットフォーム要件、最初のリクエストが決して HTTP/3 にならない理由、HttpClient とミドルウェアによる確認方法、QuicTransportOptions のチューニング、そして黙ってフォールバックさせてしまうファイアウォールとプロキシの落とし穴を扱います。
- .NET 11 で new Regex(...) を [GeneratedRegex] ソースジェネレーターに置き換える方法
.NET 11 で new Regex(pattern, RegexOptions.Compiled) を [GeneratedRegex] に変換する完全ガイドです。機械的な書き換え、部分メソッドと部分プロパティの違い、実測した起動時間とスループット、SYSLIB1040-1045 の診断、そしてジェネレーターが黙ってキャッシュ済み Regex にフォールバックする 2 つのパターンを扱います。
- .NET 11 で Web Workers を使って Blazor WebAssembly アプリの CPU 集約的な処理を実行する方法
.NET 11 で CPU 集約的な処理を Blazor WebAssembly の UI スレッドから追い出すための完全ガイドです。Task.Run が役に立たない理由、新しい blazorwebworker テンプレート、キャンセルとタイムアウトに対応した WebWorkerClient API、JSExport のマーシャリング制限、そして worker ごとに支払う 2 つ目のランタイムのコストを解説します。
- .NET 11 における IOptions<T> と IOptionsSnapshot<T> と IOptionsMonitor<T> の違い
既定では IOptions<T> を使ってください。シングルトンが設定のリロードを見る必要がある場合は IOptionsMonitor<T> を、スコープ付きの利用側が 1 リクエストの間だけ安定した値を必要とする場合にのみ IOptionsSnapshot<T> を選びます。判断軸は設定の形ではなく、利用側のライフタイムです。
2026 / 07
- 解決: JavaScript interop calls cannot be issued at this time (Blazor のプリレンダリング)
プリレンダリングはブラウザーのないサーバー上でコンポーネントを実行するため、IJSRuntime が例外を投げます。呼び出しを OnAfterRenderAsync に移すか、RendererInfo.IsInteractive で分岐するか、プリレンダリングを無効にしてください。
- 解決: Your startup project doesn't reference Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design は DbContext を含むプロジェクトではなく、dotnet ef がビルドするスタートアッププロジェクトに追加し、階層化されたソリューションでは -s を渡します。
- 解決: Reflection-based serialization has been disabled for this application
この InvalidOperationException は、PublishTrimmed または PublishAot が JsonSerializerIsReflectionEnabledByDefault を false にしたことを意味します。生成された JsonSerializerContext で解決します。
- 解決: EF Core 11 の "The model for context 'X' has pending changes"
モデルが直近のマイグレーションのスナップショットと一致しないと EF Core は PendingModelChangesWarning を投げます。マイグレーションを追加するか、誤検知の原因を直します。
- dotnet ef migrations bundle で EF Core 11 のマイグレーションを本番に適用する方法
EF Core 11 のスキーマ変更をマイグレーション bundle でデプロイするための完全ガイドです。CI での efbundle のビルド、名前付き接続文字列における appsettings.json の落とし穴、self-contained bundle と Alpine の musl RID、EF Core 9 以降のマイグレーションロック、対象マイグレーションを指定したロールバック、そして MySQL ではマイグレーション単位のトランザクションが助けにならない理由を解説します。
- .NET MAUI 11 で Shell のルートパラメーターと query properties を使ってナビゲーションする方法
.NET MAUI 11 の Shell ナビゲーションでデータを渡すための完全ガイドです。グローバルルートの登録、文字列のクエリパラメーター、QueryPropertyAttribute と IQueryAttributable の比較、両者の URL デコードの非対称性、単回使用の ShellNavigationQueryParameters とメモリを保持する IDictionary オーバーロードの違い、..?key=value による後方へのデータ受け渡し、そして QueryPropertyAttribute がトリミング安全でない理由を扱います。
- dotnet-gcdump と dotnet-dump でマネージドメモリリークを診断する方法
.NET 11 でマネージドメモリリークを見つけるための完全な手順です。dotnet-counters で増加を確認し、gcdump を 2 回取得して差分を見て、その後ダンプを収集して dotnet-dump analyze の dumpheap、gcroot、objsize で参照を保持しているものを突き止めます。
- dotnet publish /t:PublishContainer で .NET 11 アプリをコンテナーイメージとして発行する方法
Dockerfile なしで .NET 11 アプリからコンテナーイメージをビルドする完全ガイドです。PublishContainer ターゲット、ContainerRepository と ContainerImageTags、ContainerBaseImage と ContainerFamily によるベースイメージの選択、レジストリへのプッシュと認証の解決順序、マルチアーキテクチャの OCI イメージインデックス、既定の非 root ユーザー、entrypoint の制御、スキャナー向けの tarball 出力、そして今も Dockerfile が必要になるケースを扱います。
- System.Text.Json で JsonDerivedType を使ってポリモーフィックな型階層をシリアライズする方法
.NET 11 におけるポリモーフィック JSON の完全ガイドです。JsonDerivedType と JsonPolymorphic、宣言された型がすべてを決める理由、$type の順序ルール、この機能がスローするすべての例外、自分で所有していない型のためのコントラクトモデル、そして ASP.NET Core が OpenAPI に出力する内容を扱います。
- 既存の ASP.NET Core ソリューションを作り直さずに Aspire を追加する方法
既存の ASP.NET Core ソリューションに Aspire 13.4 を追加します。新しいプロジェクト 2 つとサービスあたり 3 行だけで済ませる手順として、aspire init、AddProject と WithReference による AppHost の配線、既存の launchSettings.json と接続文字列の維持、そして初日にぶつかる resilience、ヘルスエンドポイント、プロキシの落とし穴を解説します。
- .NET 11 で TimeProvider と FakeTimeProvider を使って時間依存コードをテストする方法
DateTime.UtcNow、Stopwatch、Task.Delay を System.TimeProvider に置き換えて、テストから時計を制御します。依存性注入への登録、FakeTimeProvider.Advance と SetUtcNow、タイムアウトや PeriodicTimer ベースの BackgroundService のテスト、そして Advance と継続処理の落とし穴と xUnit v2 の問題まで解説します。
- ASP.NET Core 11 で WebApplicationFactory<T> を使って統合テストを書く方法
ASP.NET Core 11 における WebApplicationFactory<TEntryPoint> の完全ガイドです。Program エントリポイントを到達可能にする方法、ConfigureTestServices と ConfigureWebHost の違い、IDbContextOptionsConfiguration 経由での EF Core 登録の差し替え、.NET 11 プレビュー 6 の新しい ConfigureHostApplicationBuilder フック、認証の偽装、WebApplicationFactoryClientOptions、そして実際のポートが必要なときの UseKestrel を解説します。
- レガシーな C# コードベースでブロッキングな .Result/.Wait() 呼び出しを全面的な非同期へ移行する
既存の .NET コードベースから sync-over-async を取り除くための段階的な手順書です。アナライザーで棚卸しし、ThreadPool の枯渇を計測し、呼び出しチェーンを 1 本ずつ変換して、.NET 11 で件数をゼロまで削り込みます。
- .NET 11 で ILogger の文字列補間から構造化ログのメッセージテンプレートへ移行する
$ 補間を使った ILogger 呼び出しを、メッセージテンプレートと [LoggerMessage] によるソース生成メソッドへ .NET 11 で置き換える手順: 何が壊れるか、CA2254 でコードベースを一掃する方法、JSON の State を検証する方法、ロールバックの手順。
- ASP.NET Core 11 のエンドポイントフィルター vs ミドルウェア: どちらを使うべきか
ASP.NET Core 11 のための判断ガイド。ミドルウェアはハンドラーがバインドを行う前にすべてのリクエストで実行され、エンドポイントフィルターは一致したエンドポイントに対してのみ、バインドの後に実行され、型付き引数を見ることができます。比較表、それぞれを選ぶ場面、順序のルール、選択を強制する要点を含みます。
- .NET 11 で Swashbuckle の IOperationFilter と ISchemaFilter を OpenAPI トランスフォーマーに移行する
Swashbuckle の IOperationFilter と ISchemaFilter のコードを .NET 11 の組み込みのオペレーショントランスフォーマーとスキーマトランスフォーマーへ移すための、フィルターごとの移行リファレンスです。コンテキストオブジェクトのマッピングと、コンパイルを壊す Microsoft.OpenApi v2 の変更を扱います。
- C# の .Result vs .Wait() vs GetAwaiter().GetResult() vs await: どれを使うべきか
await はほぼ常に正しい答えです。本当にブロックしなければならないときは、GetAwaiter().GetResult() が元の例外をスローするため .Result や .Wait() より優れています。.NET 11 と C# 14 のための判断マトリクスです。
- SignalR クライアントが .NET 11 Preview 6 でついに実行中のハブメソッドをキャンセルできます
InvokeAsync に渡す CancellationToken のキャンセルがサーバーに届き、ハブメソッドをキャンセルするようになりました。2019 年から開いていた SignalR の要望が解決します。
- ASP.NET Core 11 における型付き結果 (Results<>) vs IResult vs IActionResult
ASP.NET Core 11 では、minimal API には TypedResults を使って Results<T1, TN> を返し、コントローラーには ActionResult<T> を返します。素の IResult と素の IActionResult は非常手段として扱いましょう。どんなレスポンスでもコンパイルは通りますが、OpenAPI には何も伝えないため、手書きの ProducesResponseType 属性という代償を払うことになります。
- ASP.NET Core 11 における WebApplication.CreateBuilder vs CreateSlimBuilder vs CreateEmptyBuilder
通常のアプリには CreateBuilder を、TLS プロキシの背後でトリミングまたは Native AOT を使って発行する場合は CreateSlimBuilder を、すべてのサービスを自分で登録したい場合にのみ CreateEmptyBuilder を使いましょう。ここでは機能マトリクスと、選択を左右する落とし穴を紹介します。
- EF Core 11 における複合型 vs 所有エンティティ: どちらを選ぶべきか
EF Core 11 では、値オブジェクトにはデフォルトで複合型を使い、別テーブルが必要な場合や独自の行にマッピングされたコレクションが必要な場合にのみ所有エンティティに切り替えてください。
- ASP.NET Core 11 における出力キャッシュとレスポンスキャッシュ:どちらを使うべきか
ASP.NET Core 11 では、ほぼすべてのサーバーサイドアプリにとって出力キャッシュが正しいデフォルトです。レスポンスキャッシュが勝るのは、HTTP ヘッダーを通じてブラウザーやプロキシのキャッシュを制御することが目的の場合だけです。ここでは機能マトリクスと、判断を左右する落とし穴とともに、その決定方法を示します。
- EF Core 11 の継承マッピングにおける TPH vs TPT vs TPC: どれを選ぶべきか
EF Core 11 では、ほぼすべての階層でデフォルトとして TPH を使い、単一のリーフ型をほぼ常にクエリしベンチマークで勝ると証明できる場合のみ TPC を選び、外部の制約に強いられる場合のみ TPT を使います。
- 解決: CS4014 "Because this call is not awaited, execution of the current method continues" in C#
CS4014 は Task を返すメソッドを await せずに呼び出したことを意味します。await を追加するか、意図的な fire-and-forget なら _ = で破棄し、例外を処理してください。
- 解決: System.InvalidOperationException: Sequence contains no elements
この例外は、空のシーケンスに対して .First() や .Single() を呼び出したことを意味します。FirstOrDefault/SingleOrDefault で null をチェックするか、クエリをガードするか、ソースが空になる原因を修正します。
- .NET 11 Preview 6 で System.Text.Json が C# の union 型のシリアライズに対応
.NET 11 Preview 6 の System.Text.Json が、アクティブなケースを書き出すことで新しい C# の union 型をシリアライズする仕組みと、あいまいなケースを解決する JsonUnionAttribute 型分類子の API を解説します。
- .NET 11 Preview 6 で非同期バリデーションが Minimal API に対応
Preview 6 は AsyncValidationAttribute と IAsyncValidatableObject を追加し、DataAnnotations のルールがスレッドをブロックせずに、エンドポイントの実行前にデータベースへ問い合わせられるようにします。
- 解決: C# の CS8618「Non-nullable property must contain a non-null value when exiting constructor」
CS8618 は、null 非許容のフィールドまたはプロパティがコンストラクター終了時に初期化されていないことを意味します。コンストラクターで代入する、既定値を与える、required にする、または null 許容にして解決します。
- 解決: C# で async メソッドに対して .Result や .Wait() を呼ぶとデッドロックする
SynchronizationContext が存在する場合、.Result や .Wait() で async の Task をブロックするとデッドロックします。なぜハングするのか、.NET 11 と C# 14 でどう解決するかを説明します。
- ASP.NET Core 11 の Minimal API に health check エンドポイントを追加する方法
ASP.NET Core 11 の Minimal API における health checks の完全で実用的なガイドです。AddHealthChecks と MapHealthChecks、Healthy/Degraded/Unhealthy を返すカスタム IHealthCheck クラス、EF Core のプローブ AddDbContextCheck、Kubernetes 向けのタグベースの liveness と readiness エンドポイント、JSON の ResponseWriter、ResultStatusCodes、RequireAuthorization と RequireHost によるエンドポイントの保護、そして IHealthCheckPublisher による結果のプッシュを扱います。
- ASP.NET Core 11 の minimal API にエンドポイントフィルターを追加する方法
ASP.NET Core 11 の minimal API におけるエンドポイントフィルターの完全な実践ガイドです。インラインのデリゲートを使う AddEndpointFilter、DI を伴う IEndpointFilter クラス、GetArgument と Arguments リスト、Results.Problem によるショートサーキット、複数フィルターでの FIFO/FILO の順序、MapGroup でのグループ単位のフィルター、シグネチャに依存するフィルターのための AddEndpointFilterFactory を扱います。
- .NET 11 Preview 6 でモバイルの MAUI は CoreCLR のみに: Mono の非常口が消えた
.NET 11 Preview 6 は Android、iOS、Mac Catalyst 向け MAUI から独立した Mono パスを削除します。CoreCLR が唯一のモバイルランタイムになり、UseMonoRuntime という非常口は閉じられ、GA は 2026 年 11 月に予定されています。
- C# 15 の拡張インデクサーが .NET 11 Preview 6 で拡張メンバーを完成させる
拡張インデクサーが .NET 11 Preview 6 に登場し、自分が管理していない型に this[...] アクセスを追加できるようになりました。C# 14 のメソッドとプロパティから始まった拡張メンバーの物語を完成させます。
- ASP.NET Core 11 Preview 6 が自動 CSRF 保護を有効化
Preview 6 は、antiforgery トークンではなく Sec-Fetch-Site ヘッダーを読み取り、安全でないオリジン間のブラウザーリクエストをデフォルトで拒否します。何をブロックし、どう除外するかを解説します。
- 修正: ASP.NET Core エンドポイントへのファイルアップロードで発生する「413 Request Entity Too Large」
Kestrel はデフォルトでリクエストボディを 30,000,000 バイトに制限し、超過すると 413 を返します。MaxRequestBodySize をグローバル、エンドポイント単位、または IIS の背後では web.config で引き上げましょう。
- 修正: System.InvalidOperationException: Headers are read-only, response has already started
ボディがすでにフラッシュされた後にヘッダー、ステータスコード、または content type を設定しています。最初の書き込みの前にすべてのヘッダーを設定するか、HttpResponse.HasStarted と OnStarting で保護してください。
- 解決: EF Core 11 で "The property could not be mapped, because it is not a supported primitive type or a valid entity type"
EF Core が保存方法を知らないプロパティに遭遇しました。complex type としてマッピングするか、HasConversion で変換するか、キーを与えるか、[NotMapped] で無視しましょう。
- ASP.NET Core 11 の API にレスポンス圧縮を追加する方法
ASP.NET Core 11 におけるレスポンス圧縮の完全ガイド。AddResponseCompression と UseResponseCompression、Brotli と Gzip に加わった新しい組み込みの Zstandard プロバイダー、圧縮レベル、EnableForHttps と CRIME/BREACH のリスク、カスタム MIME タイプ、middleware の順序、そしてリバースプロキシに任せるべき場合を解説します。
- ASP.NET Core 11 の minimal API エンドポイントから型付き Results<T1, T2> ユニオンを返す方法
ハンドラーの戻り値の型を Results<Ok<T>, NotFound> と宣言し、TypedResults.Ok / TypedResults.NotFound を返します。ユニオンはハンドラーが宣言したものだけを返すことをコンパイル時にチェックし、OpenAPI に対して自己記述するため、.Produces を手書きする必要がありません。非同期ハンドラー、6 型の上限、ASP.NET Core 11 でのテストを扱います。
- EF Core 11 で Table-per-Hierarchy (TPH) の継承マッピングを構成する方法
TPH は EF Core の既定の継承戦略です。1 つのテーブルと 1 つの識別子列を使います。識別子の構成、列の共有、派生型の null 許容プロパティの扱い、そして EF Core 11 での注意点を解説します。
- ASP.NET Core 11 の Minimal API に出力キャッシュを追加する方法
ASP.NET Core 11 の Minimal API における出力キャッシュの完全な実践ガイド:AddOutputCache と UseOutputCache、エンドポイントと MapGroup での CacheOutput、名前付きポリシーとベースポリシー、Expire、VaryByQuery と VaryByHeader、EvictByTagAsync によるタグベースの無効化、キャッシュスタンピード対策、ETag による再検証、そして Redis バッキングストア。
- ASP.NET Core 11 で AddOperationTransformer と AddSchemaTransformer を使って OpenAPI ドキュメントをカスタマイズする方法
.NET 11 に組み込まれた OpenAPI トランスフォーマーパイプラインの詳細解説:operation トランスフォーマーと schema トランスフォーマーの違い、コンテキストオブジェクト、実行順序、DI で活性化されるトランスフォーマー、そしてヘッダー・レスポンス・サンプル・プロパティ単位の調整のためのレシピ。
- EF Core 11 で所有エンティティの代わりに複合型をマッピングする方法
所有エンティティは値オブジェクトと相性の悪い隠れたキーと参照同一性を持ちます。EF Core 11 で値オブジェクトを複合型としてマッピングする方法、切り替えるべきタイミング、そして注意点を解説します。
- .NET 11 の Runtime Async が EnablePreviewFeatures フラグを不要に
.NET 11 のプレビュー版が 11 月のリリースへ向けて進むにつれ、Runtime Async は成熟しました。net11.0 プロジェクトは 1 つの MSBuild プロパティで有効化でき、ランタイムライブラリ自体もそれでコンパイルされるようになりました。
- .NET の PGO とは何か、そして有効化する必要はあるのか?
PGO(プロファイルに基づく最適化)は、.NET の JIT がワークロードで実際に通る型や分岐に合わせてホットなコードを特化させる仕組みです。Dynamic PGO は .NET 8 以降デフォルトで有効なので、.NET 8 以降では有効化する必要はありません。PGO が何をするのか、その効果をどう確認するのか、そして設定に手を入れる数少ないケースを解説します。
- 階層型コンパイルとは何か、どう捉えればよいのか?
階層型コンパイルは、.NET の JIT に各メソッドを2回コンパイルさせます。まずアプリを起動させるために高速かつ未最適化で、次にランタイムがメソッドをホットだと認識した時点で完全な最適化を施して再度コンパイルします。本記事では tier 0、tier 1、オンスタック置換、Dynamic PGO がどう組み合わさるか、そしてそれらをどう観測し調整するかを解説します。
- dotnet build と dotnet publish の違いは何ですか?
dotnet build は内側の開発ループのためにプロジェクトをコンパイルし、既定で Debug を使います。dotnet publish は MSBuild の Publish ターゲットを実行し、net8.0 以降では既定で Release を使い、Web アセット、自己完結型ランタイム、単一ファイル、トリミング、AOT まで処理済みのデプロイ可能なフォルダーをパッケージ化します。ここではそれぞれが何を生成し、いつ使うかを正確に説明します。
- dotnet watch と dotnet run の違いは何ですか?
dotnet run はプロジェクトを一度ビルドして起動します。dotnet watch は dotnet run をファイル監視で包み、ソースファイルを保存するたびにアプリを再起動するか hot reload を適用します。それぞれが正確に何をするのか、dotnet watch が設定して dotnet run が設定しないものは何か、どちらをいつ使うのかを解説します。
- ASP.NET Core 11 で minimal API を手動の検証チェックから組み込み検証へ移行する
ASP.NET Core 11 の minimal API ハンドラーにある手書きの if チェックを、DataAnnotations とソースジェネレーターに基づく組み込みバリデーターへ置き換えるためのステップバイステップの移行ガイドです。何が壊れるか、どの手動ルールが移植できてどれができないか、そして 400 ProblemDetails の契約が同一のままであることをどう検証するかを扱います。
- トリムセーフなコードとは何か、どう書けばよいのか?
トリムセーフなコードとは、.NET トリマーが静的に到達可能だと証明できるコードのことで、自己完結型アプリから未使用コードが削除されても生き残ります。本記事は実践ガイドです。アナライザーを有効にし、すべての IL2xxx 警告をゼロにし、リフレクションを DynamicallyAccessedMembers で注釈し、RequiresUnreferencedCode を公開 API まで伝播させ、解析不能なパターンをソースジェネレーターに置き換えます。
- 修正: ASP.NET Core 11 の minimal API エンドポイントで「415 Unsupported Media Type」が返る
リクエストの Content-Type がエンドポイントのバインド対象と一致しないと、minimal API は 415 を返します。ボディにバインドする型には Content-Type: application/json を送信し、フォームやファイルアップロードには [FromForm] を使ってください。
- 解決: C# の CS9035「Required member 'X' must be set in the object initializer」
CS9035 は required とマークされたメンバーが割り当てられていないことを意味します。オブジェクト初期化子で割り当てるか、すべての required メンバーを設定する [SetsRequiredMembers] 付きのコンストラクターを追加します。
- ASP.NET Core 11 で IProblemDetailsService を使って Minimal API のバリデーションエラーレスポンスをカスタマイズする方法
AddProblemDetails に CustomizeProblemDetails コールバックを渡して、ASP.NET Core 11 の組み込み Minimal API バリデーションが返す 400 の形を作り直します。traceId を追加したり、title を書き換えたり、400 を 422 に切り替えたり、カスタム IProblemDetailsWriter で完全に制御したりできます。
- ASP.NET Core 11 の minimal API で JWT bearer 認証を設定する方法
ASP.NET Core 11 の minimal API における JWT bearer 認証の完全で動作する設定です。パッケージのインストール、AddAuthentication().AddJwtBearer() の配線、トークンの発行、RequireAuthorization によるエンドポイントの保護、ロールと claim のポリシーの追加、そして dotnet user-jwts によるテストまでを扱います。
- .NET 11 で CancellationToken を非同期メソッドに伝播させる方法
.NET 11 の非同期呼び出しチェーンのすべての層に CancellationToken をきれいに通す方法: 最後のパラメーターの慣習、既定値、リンクされたトークン、ASP.NET Core の RequestAborted、そして渡し忘れを検出する CA2016 アナライザー。
- C# で CancellationTokenSource.CancelAfter を使って非同期操作にタイムアウトを設定する方法
.NET 11 で非同期デッドラインを適用する CancellationTokenSource.CancelAfter の完全ガイド: コンストラクターと CancelAfter の違い、リンクされたトークン、例外処理、Task.WaitAsync、プール向け TryReset、TimeProvider によるテスト可能なタイムアウト。
2026 / 06
- 解決方法: EF Core 11 でエンティティを削除すると FOREIGN KEY constraint failed が発生する
親にまだ依存行が残っており、データベースがそれらを孤立させることを拒否するため、EF Core は FOREIGN KEY constraint failed をスローします。子を読み込む、リレーションシップをオプションにする、または OnDelete を設定してください。
- 解決方法: No service for type 'Microsoft.EntityFrameworkCore.DbContextOptions' has been registered
AddDbContext が実行されなかった、Build の後で実行された、またはコンテキストのコンストラクターが誤った DbContextOptions を受け取ると EF Core はこれをスローします。Build より前に登録し、DbContextOptions<YourContext> を使ってください。
- 修正: ASP.NET Core で JWT bearer なのに 401 ではなく 405 Method Not Allowed が返る
保護されたエンドポイントが 401 ではなく 405 を返すのは、ほぼ常に認証が実行される前にルーティングが HTTP 動詞を拒否したか、cookie スキームがチャレンジを横取りしたかのどちらかです。ここでは、どちらなのかを見分ける方法を解説します。
- 有効なトークンでも ASP.NET Core の JWT が 401 を返す理由
有効なトークンなのに 401 になる場合、ほぼ確実に bearer ハンドラーが実行されなかったか、間違ったスキームの下で実行されています。ミドルウェアの順序、既定のスキーム、スキーム名、そしてヘッダーがそもそもハンドラーに届いたかを確認しましょう。
- 修正: The seed entity for entity type 'X' cannot be added because a non-zero value is required for property 'Id'
HasData がストア生成キーのエンティティを明示的な値なしでシードしています。各行に安定したゼロ以外の Id を与えるか、生成キーには UseSeeding を使ってください。
- C# 14 で拡張プロパティを宣言する方法
拡張プロパティは新しい extension ブロックを通じて C# 14 で導入されます。読み取り専用、書き込み可能、静的、ジェネリックな拡張プロパティの宣言方法、自動プロパティが拒否される理由、そしてコンパイラーがそれらを get_/set_ アクセサーへ変換する仕組みを解説します。
- .NET 11 Preview 5 で file-based app が `#:ref` を使って互いを参照できるようになりました
.NET 11 Preview 5 は #:ref ディレクティブを追加し、dotnet run スクリプトが別の file-based app をライブラリとして参照できるようにします。推移的な参照に対応し、プロジェクトファイルは不要です。
- EF Core 11 でキーセット (カーソル) ページネーションを実装する方法
Skip/Take を、最後に見た行の先までシークする WHERE 句に置き換えます。完全に一意なキーで並べ替え、最後の行の値をカーソルとして引き継げば、EF Core 11 は次のページを OFFSET スキャンではなくインデックスシークに変えてくれます。
- EF Core 11 で JSON カラムをマッピングしてクエリする方法
ComplexProperty(...).ToJson() でネストした型を単一の JSON カラムにマッピングし、EF Core 11 に SQL Server 2025 のネイティブ json データ型で保存させ、JSON_VALUE・JSON_CONTAINS・JSON_PATH_EXISTS に変換される LINQ でクエリします。
- .NET 11 の依存性注入でキー付きサービスを登録して解決する方法
AddKeyedSingleton/Scoped/Transient で同じサービス型の複数の実装をキーの下に登録し、[FromKeyedServices]、GetRequiredKeyedService、または KeyedService.AnyKey で解決します。キー付きとキーなしの登録は別々のテーブルであり、それがほぼ全員が引っかかる落とし穴です。
- ASP.NET Core 11 で JWT の発行者、対象者、有効期限を検証する方法
ASP.NET Core 11 における TokenValidationParameters の完全ガイド: ValidateIssuer、ValidateAudience、ValidateLifetime の動作、実際のデフォルト値、なぜ Authority が発行者と署名キーを自動構成するのか、5 分間の ClockSkew の罠、そして一見有効なトークンが拒否されたときに IDX エラーコードを読む方法を解説します。
- C# 15 の閉じたクラス階層: .NET 11 Preview 5 の closed キーワード
.NET 11 Preview 5 で C# 15 は closed 修飾子を追加し、クラス階層に switch 式でのコンパイル時の網羅性をもたらします。その仕組みと唯一の注意点を解説します。
- ASP.NET Core 11 で JWT 保護された API の CORS を設定する方法
ASP.NET Core 11 における bearer トークン API の CORS 完全ガイド。認証に対する UseCors の正しい順序、Authorization ヘッダーの bearer トークンが CORS の資格情報ではない理由、AllowAnyHeader は機能するのに手書きのワイルドカードが Authorization を含めない理由、そして preflight を失敗させない方法を解説します。
- DynamicallyAccessedMembers 属性とは何ですか?
DynamicallyAccessedMembers は、リフレクションで到達する Type のメンバーを .NET トリマーと AOT コンパイラーに伝え、トリミングで削除される代わりに保持させます。これにより、サイレントなランタイムの MissingMethodException が、ビルド時の IL2070 警告に変わります。この属性が何をするのか、その背後にあるデータフロー解析がどのように動くのか、そしてパラメーター、フィールド、ジェネリック型パラメーターを正しく注釈する方法を解説します。
- ValueTask<T> とは何か、そしていつ使う価値があるのか
ValueTask と ValueTask<T> は、同期的に完了する場合に Task をヒープ割り当てせずに非同期メソッドが結果を返せるようにする構造体です。利点は、待機せずに完了することが多いホットパスで割り当てが 1 つ減ることです。代償は厳格な await-once 契約です。この型が実際に何であるか、どう動作するか、そしてその価値を発揮する狭い範囲のケースを解説します。
- ソースジェネレーターとは何か、いつ必要になるのか?
C# のソースジェネレーターについてのわかりやすいガイドです。実際に何をするのか、IIncrementalGenerator のパイプラインがどう動くのか、リフレクションや T4 より優れるのはどんなときか、そして使うべきでないケースまで解説します。.NET 11 と C# 14 で動く例つきです。
- IAsyncEnumerable<T> とは何か、いつ使うべきか
IAsyncEnumerable<T> は非同期ストリームのためのインターフェースです。要素が時間とともに到着し、それぞれの生成に await が必要になり得るシーケンスです。それが実際に何であるか、await foreach と yield がどう駆動するか、そして Task<List<T>> ではなくこれを選ぶ基準を解説します。
- Native AOT とは何か、そして何を犠牲にするのか?
Native AOT は .NET アプリを JIT のない単一の自己完結型ネイティブバイナリにコンパイルし、高速な起動と小さなメモリフットプリントを手に入れます。その代償は、ビルド時の C ツールチェーン、遅くなるパブリッシュ、RID ごとのビルド、リフレクションや Reflection.Emit の不可、必須のトリミング、そして Dynamic PGO の不在です。ここに完全な収支を示します。
- .NET 11 Preview 5 で Blazor static SSR に [SupplyParameterFromSession] が追加
静的サーバーレンダリングの Blazor でセッション状態を読むには、HttpContext.Session にアクセスして手動でシリアライズする必要がありました。.NET 11 Preview 5 は [SupplyParameterFromSession] を追加し、コンポーネントのプロパティをセッションキーに直接バインドします。
- Swashbuckle から .NET 11 の組み込み OpenAPI ジェネレーターへ移行する
.NET 11 で Swashbuckle.AspNetCore から Microsoft.AspNetCore.OpenApi へのステップバイステップの移行: AddSwaggerGen を AddOpenApi に置き換え、操作・スキーマ・ドキュメントのフィルターをトランスフォーマーに変換し、UI を残し、噛みついてくる Microsoft.OpenApi v2 の破壊的変更を扱います。
- EF Core 11 における AsNoTracking と AsNoTrackingWithIdentityResolution: どちらを使うべきか
読み取り専用のクエリにはデフォルトで AsNoTracking を使います。結果のグラフが同じエンティティを複数回含み、かつコードが単一の共有インスタンスを受け取ることに依存している場合にのみ AsNoTrackingWithIdentityResolution を使います。
- ASP.NET Core 11 の minimal API バリデーション vs FluentValidation: どちらを選ぶべきか
Minimal API の組み込み検証と FluentValidation を比較します。非同期ルール、エンドポイントフィルター、バージョン差、ライセンスを整理。
- EF Core 11 の新しい EF1004 アナライザーが静かな非同期ミスを検出します
EF Core 11 Preview 5 には EF1004 アナライザーが含まれます。IQueryable に対する ToAsyncEnumerable() を指摘し、await foreach の中でデータベースクエリを誤って同期的に列挙しないようにします。
- .NET 11 における HybridCache vs IMemoryCache vs IDistributedCache: どれを選ぶべきか?
.NET 11 の新しいキャッシュコードでは、デフォルトで HybridCache を使ってください。IMemoryCache はシリアライズ不要で単一サーバーの速度が必要なときだけ、IDistributedCache はバッキングストアとしてのみ選びます。これが判断のためのマトリクスです。
- .NET 11 Preview 5 で X25519 鍵共有が標準搭載されました
.NET 11 Preview 5 は System.Security.Cryptography に第一級の X25519DiffieHellman 型を追加し、BouncyCastle や NSec なしで Curve25519 の鍵交換ができます。
- 解決: EF Core 11 の The entity type 'X' requires a primary key to be defined
EF Core が型の主キーを見つけられません。プロパティを Id か {Type}Id と名付ける、[Key] を付ける、HasKey を呼ぶ、もしくはビューや生の SQL なら HasNoKey を呼びます。
- .NET 11 Preview 5 で LINQ に FullJoin とセレクター不要の join が追加
.NET 11 Preview 5 は LINQ に全く新しい FullJoin 演算子を追加し、さらに Join、LeftJoin、RightJoin、GroupJoin に対して結果セレクターを完全に省けるタプルを返すオーバーロードを追加します。
- .NET 11 Preview 5 で Blazor の静的 SSR フォームがクライアントサイド検証を獲得
サーバーで静的にレンダリングされる Blazor フォームは、完全な POST のラウンドトリップの後でしか検証できませんでした。.NET 11 Preview 5 は検証メタデータをレンダリングし、Blazor の JS が DataAnnotations のルールをブラウザーで適用します。circuit は不要です。
- 解決: The configured execution strategy 'SqlServerRetryingExecutionStrategy' does not support user-initiated transactions
EnableRetryOnFailure は BeginTransaction と競合します。トランザクション全体を db.Database.CreateExecutionStrategy().ExecuteAsync(...) でラップし、1 つの単位として再試行させます。
- .NET 11 Preview 5 で System.Text.Json がついに JSON Lines を書き出せるようになりました
.NET 11 Preview 5 は topLevelValues: true 付きの JsonSerializer.SerializeAsyncEnumerable を追加し、System.Text.Json が JSONL を読むだけでなくストリームで書き出せるようになりました。
- 解決: その render mode は親コンポーネントの render mode でサポートされていません (Blazor)
親がすでに対話的な子に @rendermode を付けました。サブツリーには render mode がちょうど 1 つです。子のディレクティブを削除するか、境界へ移動してください。
- .NET 11 で Blazor の静的から対話的へのレンダリング境界をまたいで状態を保持する方法
プリレンダリングされた Blazor コンポーネントは初期化を 2 回実行し、対話的への引き継ぎで状態を失います。.NET 11 の [PersistentState] 属性または PersistentComponentState サービスで解決します。
- ASP.NET Core 11 で Swashbuckle なしに OpenAPI を公開する方法
Swashbuckle は ASP.NET Core のテンプレートから消えました。.NET 11 で組み込みパッケージ Microsoft.AspNetCore.OpenApi を使って OpenAPI ドキュメントを生成し提供する方法を解説します: AddOpenApi、MapOpenApi、トランスフォーマー、複数ドキュメント、ビルド時生成、その上に載せる UI。
- MapGroup で Minimal API のエンドポイントを整理する
リソース別の拡張メソッドと MapGroup で Minimal API を整理。入れ子のルート、メタデータ、フィルター、認証、テストを説明。
- ASP.NET Core 11 でコントローラーなしに Minimal API のリクエストボディを検証する方法
ASP.NET Core 11 には Minimal API 向けの組み込み検証があります。AddValidation を呼び出し、リクエストの record を DataAnnotations で注釈すると、ソースジェネレーターがバインド済みモデルを検証し、ハンドラーが実行される前に 400 ProblemDetails を返します。コントローラー不要、FluentValidation 不要、手動チェック不要です。
- .NET 11 が MemoryCache に第一級の OpenTelemetry メトリクスを追加
.NET 11 Preview 4 は Microsoft.Extensions.Caching.Memory 用の組み込み meter を提供し、キャッシュのヒット率や eviction がバックグラウンドのポーラーなしで OpenTelemetry に流れます。
- .NET 11 で IWebHostBuilder から WebApplication.CreateBuilder へ移行する
従来の Startup.cs と WebHostBuilder ホスティングモデルから、WebApplication.CreateBuilder を中心としたミニマルホスティングモデルへ段階的に移行する手順。ASPDEPR008 の非推奨、ミドルウェアの順序、IStartupFilter、そしてテストを動作させ続ける方法を解説します。
- System.Web.HttpContext から Microsoft.AspNetCore.Http.HttpContext へ移行する
ASP.NET Framework の System.Web.HttpContext から ASP.NET Core 11 の HttpContext への実践的な移行: HttpContext.Current、プロパティ対応表、Server.MapPath、Session、そして段階的移行のための System.Web アダプターの互換シム。
- ValueTask<T> から Task<T> へ戻す移行: いつ、なぜ (.NET 11, C# 14)
ValueTask および ValueTask<T> の戻り値型を Task と Task<T> に戻すための実践的なチェックリスト。呼び出し側で何が壊れるか、各変更をどう検証するか、その入れ替えに価値があったかをどう見極めるか。
- .NET 11 で Blazor Server アプリを Blazor United (Blazor Web App) に移行する
スタンドアロンの Blazor Server アプリを .NET 11 の統合された Blazor Web App テンプレートへ移し、各ページを InteractiveServer のまま動作を変えずに維持するためのステップバイステップのチェックリストです。
- in-process の Azure Functions から分離ワーカーモデルへ移行する (.NET 8 / .NET 11)
2026 年 11 月 10 日のサポート終了までに .NET の in-process Azure Functions アプリを分離ワーカーモデルへ移すための手順別チェックリスト。csproj の diff、シグネチャの書き換え、スロットスワップによるロールアウトを含みます。
- .NET 11 で Serilog から OpenTelemetry ロギングへ移行する
.NET 11 アプリを Serilog から OpenTelemetry ロギングへ移行するためのステップバイステップガイド。低リスクな Serilog.Sinks.OpenTelemetry ブリッジ、Microsoft.Extensions.Logging への全面的な切り替え、何が壊れるか、検証方法、ロールバックの方法を解説します。
- EF Core の ExecuteUpdate とエンティティの読み込み+SaveChanges:どちらを使うべきか
EF Core 11 のための意思決定ガイドと実測ベンチマーク。述語による集合ベースの書き込みには ExecuteUpdate を使い、変更トラッカー、インターセプター、複雑なオブジェクトグラフが必要なときだけ読み込み→SaveChanges の経路を選びます。
- EF Core 6 から EF Core 11 への移行: 本当に効いてくる破壊的変更
EF Core 6.0 から EF Core 11.0 へのバージョン固定の移行ガイド。実際のアプリを壊す EF7、8、9、10、11 の破壊的変更を辿ります: Encrypt=True、OPENJSON による Contains、PendingModelChangesWarning、ネイティブ json 列、そして SqlClient 7.0 の分割。
- .NET 11 のバックグラウンドジョブにおける BackgroundService vs IHostedService vs Hangfire
インプロセスのループには BackgroundService、ライフサイクルの細かな制御が必要なときは素の IHostedService、ジョブが再起動を生き延びる必要があるときは Hangfire を選びます。コード付きの決定マトリクスと、あなたの代わりに決めてくれる一点を示します。
- .NET 11 が最小 CPU ベースラインを x86-64-v2 に引き上げ
.NET 11 Preview 4 は 2013 年より前の x86/x64 チップのサポートを打ち切り、JIT のベースラインを x86-64-v2 に引き上げます。何が壊れるのか、なぜなのか、アップグレード前にハードウェアを確認する方法を解説します。
- .NET 11 は double を hex にビット単位で往復変換できます
.NET 11 Preview 4 では double、float、Half が X 指定子でフォーマットでき、NumberStyles.HexFloat でパースできるようになり、C の printf("%a") と同じ IEEE-754 の hex テキストを生成します。
- 解決: ObjectDisposedException: Cannot access a disposed context instance
fire-and-forget タスクが、DI スコープがすでに破棄したリクエストスコープの DbContext をキャプチャしました。IServiceScopeFactory または IDbContextFactory でタスク内に新しいコンテキストを解決してください。
- EF Core 11 Preview 4: .config/dotnet-ef.json で --project と --startup-project の打ち直しをやめる
EF Core 11 Preview 4 では dotnet ef ツールが .config/dotnet-ef.json ファイルからオプションの既定値を読み込めるようになり、分割されたソリューションでもすべてのコマンドで --project と --startup-project を渡す必要がなくなります。
- EF Core 11 でクエリ分割を使ってデカルト爆発を避ける方法
2 つの同階層コレクションを Include すると、EF Core 11 はクロス積を返し、行数が爆発します。AsSplitQuery でこれをどう解決するか、グローバルに有効化する方法、そして注意すべき整合性と並び順の落とし穴を解説します。
2026 / 05
- ASP.NET Core で BackgroundService を使って fire-and-forget の処理を安全に実行する方法
コントローラーから Task.Run を呼ぶと、シャットダウン時に処理が失われ、例外が握りつぶされ、すでに破棄された scoped サービスを参照してしまいます。安全なパターンは、BackgroundService が排出する境界付き Channel キューであり、作業項目ごとに新しい scope を開き、StopAsync で実行中の処理を完了させます。
- EF Core 11 で ExecuteUpdate と ExecuteDelete を使って一括書き込みを行う方法
EF Core 11 の ExecuteUpdate と ExecuteDelete の完全ガイド。生成される SQL、一括書き込みを静かに上書きしてしまう変更トラッカーの落とし穴、トランザクション、影響を受けた行数による同時実行制御、そして EF Core 10 のデリゲートセッターで単純な if 文を使って条件付き更新を組み立てる方法を解説します。
- ASP.NET Core 11 で BackgroundService 内から scoped サービスを使う方法
BackgroundService はシングルトンなので、DbContext のような scoped サービスを直接注入できません。IServiceScopeFactory を受け取り、CreateAsyncScope で作業単位ごとに scope を開き、その中で解決し、作業が終わったら破棄します。
- AutoMapper から Mapperly のソース生成マッピングへ移行する
AutoMapper 15 の Profile、IMapper、ForMember、ProjectTo を .NET 11 の Riok.Mapperly 4.3 が生成するマッパーに置き換えるためのステップバイステップのチェックリスト。
- .NET 11 で MediatR からシンプルな依存性注入へ移行する
MediatR 12-14 を削除し、IRequest ハンドラー、ISender、pipeline behavior、INotification をシンプルなサービスクラスとコンストラクター注入で置き換えるためのステップバイステップのチェックリスト。
- 大規模な .NET 11 コードベースで Newtonsoft.Json 13 から System.Text.Json へ移行する
Newtonsoft.Json 13.0.4 を .NET 11 組み込みの System.Text.Json に置き換えるための、バージョン固定の手引きです。属性とオプションの対応付け、出力フォーマットを静かに変えてしまうデフォルト値、段階的な展開戦略、検証、そして大規模コードベースを襲う落とし穴を扱います。
- .NET 8 から .NET 11 への移行: 完全チェックリスト
.NET 11 RC3 の現状、SDK の厳密な固定、互換性、配備検証、ロールバックに基づく .NET 8 移行ガイド。
- 2026 年に .NET Framework 4.8 から .NET 11 へ移行する
.NET Framework 4.8 の移行を、正確なサポート情報、ASP.NET の段階移行、依存関係、設定、ロールバックから計画。
- Xamarin.Forms 5.0 から .NET MAUI 11 への移行: 完全チェックリスト
net11.0 上での Xamarin.Forms 5.0 から .NET MAUI 11 GA へのエンドツーエンド移行。csproj の書き換え、カスタムレンダラーからハンドラーへの変換、AppShell の配線、DependencyService の撤去、MessagingCenter の引退、Resizetizer アセット、実プロダクションコードを噛む落とし穴までカバーします。
- .NET 11 における Azure Functions の isolated worker と in-process の比較: 2026 年にどちらを選ぶべきか
2026 年の .NET 11 上の Azure Functions アプリケーションでは isolated worker モデルを選び、残存する in-process アプリは 11 月 10 日の廃止期限までに移行してください。
- .NET 11 の Blazor レンダーモード: Server、WebAssembly、Auto
ホスティング、オフライン、サービス要件から Blazor Web App とスタンドアロン WebAssembly を比較。Auto の動作も訂正。
- EF Core 11 Preview 4: テンポラルテーブルの期間列がついに本物のプロパティになれる
EF Core 11 Preview 4 で SQL Server テンポラルテーブルに対する長年の shadow プロパティ制約が撤廃されました。PeriodStart と PeriodEnd を通常の CLR プロパティとして宣言し、強く型付けされた HasPeriodStart と HasPeriodEnd のラムダで設定できます。
- .NET 11 における StringBuilder と文字列補間: どちらを使うべきか
固定された値のセットを一度に組み立てるなら文字列補間を、ループ内や数が不明なフラグメントにわたって追加するなら StringBuilder を使ってください。分かれ目はループであって、値の数ではありません。
- .NET 11 Preview 4 の ASP.NET Core が OpenAPI に HTTP QUERY メソッドを教える
.NET 11 Preview 4 により、ASP.NET Core の OpenAPI 生成は HTTP QUERY を OpenAPI 3.2 の第一級の操作として認識するようになり、3.0 と 3.1 のドキュメントには適切なフォールバックが用意されます。
- .NET 11 における Polly と resilience handler の比較: どちらを使うべきか?
HttpClient の呼び出しには Microsoft.Extensions.Http.Resilience の resilience handler を使ってください。これは HTTP を理解したデフォルト値とテレメトリを 1 行で備えた Polly そのものだからです。HttpClient ではないものを保護する場合にのみ、Polly の ResiliencePipeline を直接使ってください。
- .NET 11 がアロケーションなしの Deflate と GZip 圧縮を追加
.NET 11 Preview 4 は DeflateEncoder、GZipEncoder、ZLibEncoder とそれぞれのデコーダーを提供し、Stream なしで OperationStatus を使って Span<byte> に直接圧縮できます。
- EF Core のコンパイル済みクエリ vs 生 SQL vs Dapper: 読み取りパスではどれが勝つか?
.NET 11 の読み取り中心のパスでは、AsNoTracking を付けた素の EF Core は Dapper の ~5% 以内に収まります。コンパイル済みクエリはプロファイル済みの単一行ホットパスで使い、Dapper は最小のレイテンシや LINQ で表現できない SQL のためだけに使いましょう。
- HttpClient vs HttpClientFactory vs Refit: .NET 11 ではどれを使うべきか
リクエストごとに HttpClient を new してはいけません。ライフタイム管理には IHttpClientFactory を使い、手書きのリクエストコードではなく型付きインターフェースが欲しいときに Refit を上に重ねます。素の singleton HttpClient は最も単純なケースでのみ妥当です。
- MediatR vs 単純なサービスクラス(2026年): ライセンス変更で乗り換えるべきか?
MediatR のディスパッチとパイプライン、サービスの直接呼び出しを比較します。DI 検証、ライセンス条件、性能の測り方を説明します。
- C# 16 は unsafe を呼び出し側への契約に作り変えます
C# 16 は unsafe キーワードを再設計し、暗黙的に unsafe コンテキストを開く代わりに呼び出し側への義務を伝播するようにします。内部の unsafe ブロックも必須になります。
- .NET 11 における Native AOT vs ReadyToRun vs JIT: どれを出荷すべきか
クラシックな JIT は Dynamic PGO により定常状態のスループットで勝ち、ReadyToRun はコード変更なしで起動を速くし、Native AOT はリフレクションと動的コードを犠牲にして最小かつ最速起動のバイナリを生みます。単独のベンチマークではなく、デプロイの形で選んでください。
- System.Text.Json vs Newtonsoft.Json(2026年): どちらを選ぶべきか?
.NET 11 の新規コードには System.Text.Json を選びましょう。ランタイムに同梱され、約2倍高速で、Native AOT で動作する唯一の選択肢です。Newtonsoft.Json は JSONPath、TypeNameHandling、本当に緩い JSON のためだけに使います。
- .NET 11 における ConfigureAwait(false) とデフォルトの比較: 今でも重要か?
ConfigureAwait(false) は、SynchronizationContext (WinForms、WPF、MAUI) 下で動作する可能性のあるライブラリコードでは依然として必須です。.NET 11 上の ASP.NET Core、コンソールアプリ、Worker サービスのアプリケーションコードでは no-op です。
- C# における IEnumerable vs IAsyncEnumerable vs IQueryable:メソッドは何を返すべきか
3 つのシーケンスインターフェース、3 つの実行モデル。データベースがクエリを変換できる場合は IQueryable を、プロデューサーが非同期でストリーミングしたい場合は IAsyncEnumerable を、それ以外のメモリ内のものには IEnumerable を使用します。
- ASP.NET Core 11 における Minimal APIs vs コントローラー:2026 年はどちらを選ぶべきか?
ASP.NET Core 11 ではデフォルトで Minimal APIs を選びます。コントローラーは、Minimal APIs がまだカバーしていない MVC の機能、つまり多数のアクションに対する規約ベースのルーティング、MVC スタイルのフィルター、Razor ビューが必要な場合にのみ使います。
- EF Core 11 vs Dapper の一括挿入: リアルなベンチマーク
.NET 11 での一括挿入では、EF Core も Dapper も勝ちません。SqlBulkCopy が勝ちます。これはそのベンチマークと理由、そして各ツールにふさわしい場所です。
- dotnet new mcpserver が .NET 11 Preview 4 SDK に同梱されました
.NET 11 Preview 4 は mcpserver プロジェクトテンプレートを直接 SDK に同梱します。Microsoft.McpServer.ProjectTemplates の個別インストールも、preview フィードの手間もありません。stdio か HTTP のトランスポートを選び、Native AOT を有効にし、dotnet new mcpserver -o MyServer がセットアップのすべてです。
- 修正: プロビジョニングプロファイルに現在選択されているデバイスが含まれていない (MAUI iOS)
Visual Studio が選択したプロファイルは、この iPhone の UDID を登録する前に生成されました。デバイスを再登録し、開発用プロファイルを再生成、ダウンロードし、再度デプロイしてください。
- Fix: MAUI ビルド時の Unable to find a valid iOS Simulator runtime
Xcode 15 以降は iOS シミュレーターランタイムが同梱されません。SupportedOSPlatformVersion に一致するランタイムが未インストールだと MAUI のビルドが失敗します。xcodebuild -downloadPlatform iOS または Xcode Settings からインストールし、xcrun simctl list runtimes で確認してください。
- .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 でタイムアウトを設定してください。
- .NET 11 Preview 4 で MAUI が Android、iOS、Mac Catalyst のデフォルトで CoreCLR に切り替わる
.NET 11 Preview 4 では、Android、iOS、Mac Catalyst、tvOS 上の MAUI のデフォルトのランタイムが CoreCLR になります。Mono は依然として MSBuild プロパティ 1 つで使えます。変わるもの、壊れるもの、そして無効化する方法を解説します。
- .NET 11 Preview 4 で dotnet watch がついに MAUI の Android と iOS に対応
.NET 11 Preview 4 では Android 実機、Android エミュレーター、iOS シミュレーターで dotnet watch が有効になります。編集して保存するだけで、手動のリビルドなしに実行中のアプリが更新されます。iOS には csproj の落とし穴が 1 つあります。
- 修正: 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 で区別したうえで、正しい原因を修正してください。
- Fix: The JSON value could not be converted to System.DateTime
System.Text.Json は DateTime に ISO 8601 文字列のみ受け付けます。2026-05-08T14:00:00Z を送るか、JsonConverter を登録してフォーマットをパースしてください。空文字や Unix タイムスタンプも例外を投げます。
- 修正: 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 を取得してください。
- 修正: System.InvalidOperationException: No connection string named 'DefaultConnection' could be found
.NET 11 で GetConnectionString が null を返す場合、appsettings.json にキーがない、ビルド出力にコピーされていない、または間違った環境ファイルが選ばれているかのいずれかです。3 つのチェックで 95% のケースが解決します。
- .NET MAUI アプリを Microsoft Store 向けにパッケージ化する方法
.NET MAUI 11 の Windows アプリを MSIX としてパッケージ化し、x64/x86/ARM64 を .msixupload にバンドルして、Partner Center 経由で送信するエンドツーエンドのガイド: アイデンティティの予約、Package.appxmanifest、dotnet publish フラグ、MakeAppx バンドリング、Store 信頼の証明書ハンドオフ。
- Microsoft.Extensions.AI Chat Client にツール呼び出しを追加する方法
Microsoft.Extensions.AI 10.5 で AIFunctionFactory.Create、ChatOptions.Tools、ChatClientBuilder.UseFunctionInvocation を接続し、IChatClient から .NET メソッドを自動的に呼び出せるようにする方法を解説します。OpenAI と Azure OpenAI のプロバイダー、実際に効く FunctionInvokingChatClient のノブ (反復回数の上限、同時呼び出し、承認プロンプト、エラー処理)、そしてツール付きストリーミング応答までを扱います。
- .NET MAUI 11 でドラッグアンドドロップを実装する方法
.NET MAUI 11 でのエンドツーエンドのドラッグアンドドロップ:DragGestureRecognizer、DropGestureRecognizer、カスタム DataPackage ペイロード、AcceptedOperation、ジェスチャー位置、Android、iOS、Mac Catalyst、Windows のプラットフォーム別 PlatformArgs の落とし穴。
- .NET MAUI アプリでダークモードを正しくサポートする方法
.NET MAUI 11 におけるダークモードのエンドツーエンド: AppThemeBinding、SetAppThemeColor、RequestedTheme、UserAppTheme による上書きと永続化、RequestedThemeChanged イベント、そしてドキュメントが触れていない Info.plist と MainActivity のプラットフォーム固有の設定です。
- .NET 11 の Blazor WebAssembly で Tailwind CSS を使う方法
.NET 11 の Blazor WebAssembly アプリ向けに Tailwind CSS v4 を完全セットアップ。スタンドアロン CLI(Node 不要)、MSBuild ターゲット、Razor と CSS 分離ファイル向けの @source ディレクティブ、Native AOT でも壊れない publish パイプラインを解説します。
- EF Core 11 で N+1 クエリを検出する方法
EF Core 11 で N+1 クエリを見つけるための実践ガイドです。実際のコードで N+1 がどのように現れるか、ログ、診断インターセプター、OpenTelemetry を使ってどのように可視化するか、そしてホットパスがリグレッションしたときにビルドを壊すテストの書き方を解説します。
- ホットパス向けに EF Core でコンパイル済みクエリを使う方法
EF Core 11 のコンパイル済みクエリを実践的に解説します。EF.CompileAsyncQuery が本当に効くのはどんなときか、static フィールドのパターン、Include とトラッキングの落とし穴、追加の手間を払う価値があったと証明するためのビフォー/アフターのベンチマーク方法までを取り上げます。
- Windows と macOS だけで動く MAUI アプリの書き方 (モバイルなし)
.NET MAUI 11 プロジェクトから Android と iOS を取り除き、Windows と Mac Catalyst のみを出荷するための csproj 編集、workload コマンド、コードをきれいに保つマルチターゲティング。
- .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 のはまりどころを解説します。
- .NET 11 Preview 4 で VSTest が Newtonsoft.Json を切り離す、推移的依存に頼っていた場合に壊れる場所
.NET 11 Preview 4 と Visual Studio 18.8 が出荷する VSTest は、もう Newtonsoft.Json をテストプロジェクトに流し込みません。推移的なコピーをこっそり使っていたビルドは壊れ、PackageReference を一行足すだけで直ります。
2026 / 04
- ASP.NET Core 11 でエンドポイントごとのレート制限を追加する方法
ASP.NET Core 11 におけるエンドポイントごとのレート制限の完全ガイド: fixed window と sliding window、token bucket、concurrency のいずれを選ぶか、RequireRateLimiting と [EnableRateLimiting] の違い、ユーザーや IP によるパーティショニング、OnRejected コールバック、そして誰もが踏む分散デプロイの落とし穴。
- .NET 11 Minimal API からストリーミングで Claude API を呼び出す方法
ASP.NET Core 11 minimal API から Claude のレスポンスをエンドツーエンドでストリーミングします。公式 Anthropic .NET SDK、TypedResults.ServerSentEvents、SseItem、IAsyncEnumerable、キャンセルの流れ、そしてトークンを静かにバッファリングしてしまう落とし穴を扱います。Claude Sonnet 4.6 と Opus 4.7 の例付き。
- .NET で System.Threading.Lock を使う方法
.NET 9 以降の同期クリティカルセクションで System.Threading.Lock を使います。コンパイラの動作、await の制限、Monitor との違いを説明します。
- INotifyPropertyChanged 用のソースジェネレーターを書く方法
C# 14 と .NET 11 で INotifyPropertyChanged 用の独自のインクリメンタルなソースジェネレーターを構築する完全ガイドです。IIncrementalGenerator パイプライン、マーカー属性、partial class 出力、SetProperty パターン、AOT 対応を保つ方法を扱います。
- .NET でファイルの書き込みが完了したことを検知する方法
FileSystemWatcher は書き込み側が終わる前に Changed を発火します。.NET 11 でファイルが完全に書き込まれたことを知るための信頼できる 3 つのパターン: FileShare.None でオープンする、サイズの安定化でデバウンスする、そして問題そのものを回避するプロデューサー側の rename トリックです。
- サーバーと Blazor WebAssembly でバリデーションロジックを共有する方法
Blazor WebAssembly + ASP.NET Core アプリでバリデーションがずれていく最大の原因は、ルールを二度書きたくなる衝動です。本記事では .NET 11 で唯一スケールするレイアウトを示します。DTO とそのバリデーターを所有する Shared クラスライブラリを WASM クライアント (EditForm + DataAnnotationsValidator または Blazored.FluentValidation) とサーバー (minimal API のエンドポイントフィルターまたは MVC のモデルバインディング) の両方から参照し、サーバーから返ってきた ValidationProblemDetails を同じ EditContext に書き戻すラウンドトリップまでテスト済みで構築します。
- .NET 11 で SearchValues<T> を正しく使う方法
SearchValues<T> は IndexOfAny の 5 倍から 250 倍速いですが、ランタイムが期待する使い方をした場合に限ります。static としてキャッシュするルール、StringComparison の落とし穴、使うべきでない場面、そして誰も書いていない IndexOfAnyExcept による反転トリックを解説します。
- .NET 11 で Swagger UI に OpenAPI 認証フローを追加する方法
.NET 11 では OpenAPI ドキュメントは Microsoft.AspNetCore.OpenApi が生成し、Swagger UI はテンプレートに含まれません。Bearer、PKCE 付き OAuth2、OpenID Connect を Authorize ボタンが実際に動くように接続する方法を解説します。
- ASP.NET Core Identity でリフレッシュトークンを実装する方法
.NET 11 における 2 つの実用的な選択肢: MapIdentityApi に組み込まれた /refresh エンドポイントと、JWT、リフレッシュトークンのローテーション、ファミリー追跡、再利用検出を備えたカスタム実装。
- 大きなファイルをストリーミングで Azure Blob Storage にアップロードする方法
.NET 11 から数 GB のファイルをメモリに載せずに Azure Blob Storage へアップロードする方法。BlockBlobClient.UploadAsync と StorageTransferOptions、ASP.NET Core アップロードの MultipartReader、ペイロードを LOH に載せてしまうバッファリングの罠を解説します。
- .NET 11 AWS Lambda のコールドスタート時間を縮める方法
.NET 11 Lambda のコールドスタートを縮める実用的でバージョン特化のプレイブック。provided.al2023 上の Native AOT、ReadyToRun、マネージド dotnet10 ランタイムでの SnapStart、メモリ調整、静的フィールドの再利用、トリム安全性、そして INIT_DURATION の正しい読み方を扱います。
- ASP.NET Core minimal API で Native AOT を使う方法
生成した JSON メタデータで Minimal API を Native AOT に対応させる手順。Builder、配備先ツールチェーン、警告、機能制約を説明。
- EF Core のモデルを最初のクエリの前にウォームアップする方法
EF Core は最初の DbContext アクセスで概念モデルを遅延構築するため、新しいプロセスでの最初のクエリは以後のどのクエリよりも数百ミリ秒遅くなります。本ガイドでは EF Core 11 で実用に足る三つの対策を扱います: Model に触れて接続を開く起動時の IHostedService、事前コンパイル済みモデルを出荷する dotnet ef dbcontext optimize、そして二つの対策を静かに無効化するキャッシュキーの落とし穴です。
- 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 への登録までカバーします。
- 変更追跡を壊さずに DbContext をモックする方法
DbContext を直接モックすると ChangeTracker が静かに壊れます。だからこそ Microsoft はそれを推奨していません。本ガイドは EF Core 11 で実際に機能する 2 つのパターンを示します。接続を開いたまま保持して本物の ChangeTracker を動かす SQLite インメモリと、テストから EF Core を完全に追い出すリポジトリパターンです。
- HttpClient を使用するコードのユニットテストを書く方法
.NET 11 における HttpClient のテスト完全ガイド: HttpClient を直接モックすべきでない理由、スタブ HttpMessageHandler の書き方、IHttpClientFactory での primary handler の差し替え、Polly のリトライ検証、WireMock.Net という選択肢。
- 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 11 で OpenAPI 仕様から強く型付けされたクライアントコードを生成する方法
Microsoft 公式の OpenAPI コードジェネレーターである Kiota を使って、任意の OpenAPI 仕様から fluent で強く型付けされた C# クライアントを生成します。インストール、生成、ASP.NET Core DI への組み込み、認証設定まで順を追って解説します。
- .NET 11 でメモリ不足にならずに大きな CSV を読む方法
.NET 11 で複数ギガバイトの CSV を OutOfMemoryException なしでストリーミングする。File.ReadLines、CsvHelper、Sylvan、Pipelines をコードと計測値で比較。
- ASP.NET Core エンドポイントからバッファリングなしでファイルをストリーミングする方法
ASP.NET Core 11 でファイル全体をメモリに読み込まずに大きなファイルを配信します。3 つのレベル: ディスク上のファイルには PhysicalFileResult、任意のストリームには Results.Stream、生成コンテンツには Response.BodyWriter -- それぞれのコード付き。
- EF Core 11 Preview 3 がテストでクリーンなプロバイダースワップのための RemoveDbContext を追加
EF Core 11 Preview 3 は RemoveDbContext、RemoveExtension、そして AddPooledDbContextFactory の引数なしオーバーロードを導入し、テストでのプロバイダー切り替え周りのボイラープレートを除去して pooled factory 設定を集約します。
- デッドロックせずに C# の長時間 Task をキャンセルする方法
.NET 11 における CancellationToken、CancelAsync、Task.WaitAsync、リンクトークンを使った協調的キャンセル。そしてクリーンなキャンセルをデッドロックに変えてしまうブロッキングパターン。
- EF Core 11 で IAsyncEnumerable<T> を使う方法
EF Core 11 のクエリは IAsyncEnumerable<T> を直接実装しています。await foreach で行をストリーミングする方法、ToListAsync より好むべきタイミング、接続・トラッキング・キャンセルまわりの落とし穴。
- EF Core 11 で record を正しく使う方法
C# の record と EF Core 11 を組み合わせる実践的なガイド。record がどこに収まり、どこで change tracking を壊すのか、そしてフレームワークと戦わずに value object、エンティティ、プロジェクションをモデリングする方法。
- .NET 11 Preview 3 で Kestrel が SETTINGS フレーム前に HTTP/3 リクエストの処理を開始
.NET 11 Preview 3 では、Kestrel がピアの control stream と SETTINGS フレームの到着を待たずに HTTP/3 リクエストを処理できるようになり、新しい QUIC 接続のたびに最初のリクエストの handshake レイテンシが削減されます。
- EF Core 11 が SQL Server 2025 で Contains を JSON_CONTAINS に翻訳
EF Core 11 は JSON コレクションに対する LINQ Contains を SQL Server 2025 の新しい JSON_CONTAINS 関数に自動翻訳し、JSON インデックスを利用できるパス指定・モード指定クエリ向けに EF.Functions.JsonContains を追加します。
- C# 14 のメソッドから複数の値を返す方法
C# 14 のメソッドから複数の値を返す 7 つの方法: 名前付きタプル、out パラメーター、records、structs、デコンストラクション、そして自分が所有していない型に対する extension member のトリック。実測ベンチマークと意思決定マトリクスを最後に掲載しています。
- 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 sln がついに CLI から solution filter を編集
.NET 11 Preview 3 は dotnet sln に .slnf の solution filter でプロジェクトを作成、追加、削除、一覧するやり方を教えます。大規模モノレポが Visual Studio を開かずにサブセットをロードできるようになります。
- .NET 11 Preview 3 の dotnet watch: Aspire ホスト、クラッシュリカバリー、まともな Ctrl+C
.NET 11 Preview 3 で dotnet watch が Aspire app host 統合、クラッシュ後の自動再起動、Windows desktop アプリ向けの修正された Ctrl+C 処理を得ます。
- EF Core 11 が split query で不要な reference join を刈り込む
EF Core 11 Preview 3 は split query から冗長な to-one join を除去し、不要な ORDER BY キーを落とします。報告された一つのシナリオは 29% 速くなり、別のは 22% でした。今の SQL はこう見えます。
- .NET 11 Preview 3 の System.Text.Json が PascalCase とメンバー単位のネーミングポリシーを追加
.NET 11 Preview 3 は System.Text.Json のネーミングポリシーの話を完成させます: JsonNamingPolicy.PascalCase、メンバーレベルの [JsonNamingPolicy] 属性、そしてクリーンな DTO のための型レベルの [JsonIgnore] デフォルト。
- Blazor Virtualize が .NET 11 でついに可変高さアイテムを扱う
.NET 11 Preview 3 の ASP.NET Core は Virtualize コンポーネントにランタイムでアイテムを測ることを教え、一様高さ仮定が引き起こしていた spacing とスクロールのジッターを修正します。
- .NET MAUI 11 Maps に pin clustering が着陸
.NET MAUI 11 Preview 3 は Android と iOS の Map コントロールにビルトイン pin clustering を追加し、ClusteringIdentifier グループと ClusterClicked イベントを備えます。
- EF Core 11 が DetectChanges をスキップする GetEntriesForState を追加
EF Core 11 Preview 3 は ChangeTracker.GetEntriesForState を導入します。state フィルターされた enumerator で、SaveChanges interceptor や audit hook のようなホットパスで余分な DetectChanges パスを避けます。
- .NET MAUI 11 がビルトインの LongPressGestureRecognizer を出荷
.NET MAUI 11 Preview 3 は LongPressGestureRecognizer を first-party のジェスチャーとして追加し、duration、移動しきい値、state イベント、command バインディングを備え、一般的な Community Toolkit の behavior を置き換えます。
- EF Core 11 がデフォルトで Cosmos DB transactional batch を有効にする
EF Core 11 は Cosmos DB の書き込みを SaveChanges ごとに container と partition 単位で transactional batch にグループ化し、コード変更なしで best-effort な原子性とラウンドトリップ削減を提供します。
- Blazor SSR が .NET 11 でついに TempData を獲得
.NET 11 Preview 2 の ASP.NET Core が Blazor の静的サーバーサイドレンダリングに TempData をもたらし、回避策なしで flash メッセージと Post-Redirect-Get フローを可能にします。
- C# 15 のコレクション式引数: with(...) でコンストラクタをインラインで渡す
C# 15 はコレクション式に with(...) 要素を追加し、容量、コンパレーター、その他のコンストラクタ引数を初期化子内で直接渡せるようにします。
- .NET 11 が System.IO.Compression にネイティブな Zstandard 圧縮を追加
.NET 11 Preview 1 は ZstandardStream、ZstandardEncoder、ZstandardDecoder を System.IO.Compression に出荷し、サードパーティパッケージなしで高速なビルトイン zstd サポートを提供します。
- 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 アプローチからの変更点を紹介します。
- ASP.NET Core 11 がネイティブ OpenTelemetry トレーシングを出荷: 追加の NuGet パッケージを捨てよう
.NET 11 Preview 2 の ASP.NET Core は OpenTelemetry セマンティック属性を HTTP サーバーアクティビティに直接追加し、OpenTelemetry.Instrumentation.AspNetCore を不要にします。
- 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% 削減します。
- .NET 11 Runtime Async がステートマシンを置き換え、よりクリーンなスタックトレースを実現
.NET 11 の Runtime Async は async/await の処理をコンパイラ生成のステートマシンからランタイム自体に移し、読みやすいスタックトレース、正しいブレークポイント、ヒープ割り当ての削減を実現します。
- dotnet new webworker: .NET 11 Preview 2 で Blazor 向けファーストクラスの Web Workers
.NET 11 Preview 2 の新しいプロジェクトテンプレートが、ブラウザの Web Worker で .NET コードを実行するために必要な JS 配管、WebWorkerClient、JSExport ボイラープレートをスキャフォールドします。