注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #124341 copy_version_files.ps1 improve comparison
- #124340 runtime-extra-platforms.yml: change schedule to once a day at 3am UTC
- #124335 JIT: Fix immediate assert when relocs are enabled
- #124324 Make System.Net.Mail test more trim friendly
- #124316 Merge branch 'release/8.0-staging' => 'release/8.0' (resolve conflicts)
- #124315 [manual] [after revert] Merge release/9.0-staging into release/9.0
- #124314 Merge branch 'release/8.0' => 'release/8.0-staging'
- #124313 Revert "[manual] Merge release/9.0-staging into release/9.0"
- #124312 Revert "[automated] Merge branch 'release/8.0' => 'release/8.0-staging'"
- #124311 Fix SYSLIB1045 quick fix for C# 14 extension members
- #124310 [manual] Merge release/8.0-staging into release/8.0
- #124306 Fix failed ElidedBoundsChecks test
- #124305 [manual] Merge release/9.0-staging into release/9.0
- #124302 Remove RequiresProcessIsolation from AsyncCovariantReturn
- #124295 Rename Future references to Task throughout codebase
- #124294 Fix NIndex/NRange ToString truncation on 64-bit: cast to nuint instead of uint
- #124293 Fix NullReferenceException in RuntimeParameterInfo.GetCustomAttributesData()
- #124292 Make GetGetDotNetCert clone the certificate for reliability
- #124291 Remove nullcheck effect from array len (global AP)
- #124290 JIT: clear must keep flag for blocks created in GDV expansions
- #124286 JIT: some GT_INDEX_ADDRs won't need throw helpers
- #124284 Remove redundant range checks in Uri scheme parsing
- #124282 Fix S.N.Tensors SLNX to remove project file that no longer exists
- #124270 [browser] rename test-main.mjs
- #124256 Add SIGKILL to PosixSignal enumeration
- #124246 [automated] Merge branch 'release/8.0' => 'release/8.0-staging'
- #124240 ci-analysis: structured output, MCP integration, and deep investigation guides
- #124176 Add support for binding FormatterOptions from config file
- #124168 Make CoreCLR + crossgen2 ioslike via --dynamiccodecompiled false
- #123783 Fix BigInteger char parsing with Ukrainian culture NBSP handling (bidirectional)
- #123752 Fix Task
debug proxy Result behavior and rename from Future - #123686 Add AttributeTargets.Interface to ExcludeFromCodeCoverageAttribute and StackTraceHiddenAttribute
- #123555 Fix race condition in channel completion
- #123435 Fix WriteOnceBlock race condition where ReceiveAsync returns null
- #123411 Fix mixed mode debugging for PInvoke by adding PInvokeStubManager
- #123133 Fix NullReferenceException in ConfigurationElement indexer when property is undefined
- #122638 Introduce local variables with unknown size
- #122126 Async instantiating and unboxing thunks
#124341 copy_version_files.ps1 improve comparison
- 作成者: @pavelsavara
- 作成日時: 2026年02月12日 12:59:37(UTC)
- マージ日時: 2026年02月12日 21:28:47(UTC)
- ラベル: area-Infrastructure-coreclr
概要
Windows環境でのインクリメンタルビルドの安定性を向上させるPull Requestです。copy_version_files.ps1スクリプトで_version.cファイルの比較ロジックを改善し、空白文字の取り扱いに対するセンシティビティを低減しています。これにより、不要なファイル再生成によるビルド破損を防止します。
変更内容
- eng/native/version/copy_version_files.ps1:
-ne比較演算子からCompare-Objectへの変更(+2/-1)artifacts/obj/_version.c上書き判定ロジックの改善- 上書き条件を説明するコメント追加
パフォーマンスへの影響
改善点: Windows環境でのビルドキャッシュの効率化により、インクリメンタルビルド時の不要な再コンパイルを削減します。空白文字の違いによる誤検知がなくなり、ビルド時間の短縮が期待できます。
懸念点: Compare-Objectは-ne比較より若干処理負荷が高いものの、実際の影響は限定的(バージョンファイル処理は軽量)で、全体的なビルド効率化による利益が上回ります。
関連Issue
なし
その他
このスクリプトはネイティブコンパイル時のバージョン情報ファイル生成処理の一部です。Windows特有の改行・インデント処理による比較不一致がインクリメンタルビルドを破損させていた問題への対応と考えられます。
#124340 runtime-extra-platforms.yml: change schedule to once a day at 3am UTC
- 作成者: @akoeplinger
- 作成日時: 2026年02月12日 12:25:09(UTC)
- マージ日時: 2026年02月12日 12:27:39(UTC)
- ラベル: area-Infrastructure
概要
Azure Pipelines の "runtime extra platforms" パイプラインの実行スケジュールを変更しました。従来の1日2回実行(09:00 UTC と 21:00 UTC)から1日1回実行(03:00 UTC)に変更することで、実行頻度を削減しつつ、PR実行時にはカバーされないプラットフォームの定期的なテスト覆率を維持します。
変更内容
- eng/pipelines/runtime-extra-platforms.yml: cron スケジュールを更新
- 変更前:
0 9,21 * * *(09:00 UTC と 21:00 UTC の2回実行) - 変更後:
0 3 * * *(03:00 UTC の1回実行) - インラインコメントも新しいスケジュール時刻に対応して更新
- 変更前:
パフォーマンスへの影響
直接的なパフォーマンス改善ではなく、CI/CDパイプラインの実行削減による以下の効果:
- Azure Pipelines リソース使用率: 50%削減(1日2回 → 1回)
- ビルド時間への影響: なし
- テスト実行時間: なし
関連Issue
なし
その他
- スケジュール変更の時間帯(03:00 UTC)は、一般的な開発活動がアジア太平洋地域で多く発生する時間に配置されており、テスト結果が次の労働時間に利用可能になる設計と考えられます
- "runtime extra platforms" はPR時には実行されないプラットフォーム向けのテストであるため、定期スケジュール実行による継続的な品質監視が重要な役割を果たします
#124335 JIT: Fix immediate assert when relocs are enabled
- 作成者: @jakobbotsch
- 作成日時: 2026年02月12日 11:05:56(UTC)
- マージ日時: 2026年02月12日 18:43:10(UTC)
- ラベル: area-CodeGen-coreclr
概要
ARM64 JIT コンパイラにおいて、リロケーション記録時の即値エンコードアサート問題を修正。リロケーション対象のアドレス計算では、最終的なコード配置前の即値は無意味であり、エンコード不可能なため、プレースホルダー値 0 を使用するように改善しました。
変更内容
- src/coreclr/jit/emitarm64.cpp
id->idIsReloc()が設定されている場合、adrpページデルタとaddページオフセットに対してプレースホルダー0即値を出力- 最終アドレスデルタの計算・エンコード処理をスキップ
ARM64_PAGEBASE_REL21およびARM64_PAGEOFFSET_12Aリロケーション情報は継続して記録
パフォーマンスへの影響
影響なし。本修正はコンパイル時の処理フローの改善であり、生成されるコード品質やランタイムパフォーマンスに変化はありません。
関連Issue
#124327 - ARM64 JIT label-address emission with relocations enabled で発生していたアサート問題
その他
- 対象: ARM64 アーキテクチャ専用修正
- リロケーション有効時のコンパイルロジックを改善し、ローダー/リンカーによる最終値パッチング時に正しいリロケーション情報が適用されることを保証
- 最小限の変更(+2/-2 行)で局所的な問題解決を実現
#124324 Make System.Net.Mail test more trim friendly
- 作成者: @MichalStrehovsky
- 作成日時: 2026年02月12日 08:30:23(UTC)
- マージ日時: 2026年02月12日 15:02:52(UTC)
- ラベル: area-System.Net
概要
System.Net.Mail のテストを Native AOT(Ahead-of-Time)コンパイルに対応させるための修正です。Runtime async による最適化により、リフレクション経由の汎用メソッド呼び出しが失敗するようになったため、テストコードを trim friendly(トリミング対応)に改善しました。
変更内容
src/libraries/System.Net.Mail/tests/Functional/MailMessageTest.cs
DecodeSentMailMessageメソッド内でMakeGenericMethodを使用していたリフレクションベースのコードを修正- テストコードの3行を変更(+1/-2)し、Native AOT での動的呼び出しに対応
パフォーマンスへの影響
影響なし
関連Issue
#122526(Runtime async によるテスト失敗)
その他
この修正は、Native AOT コンパイラがより積極的な最適化を行えるようになったことに伴う必要な調整です。リフレクション(特に MakeGenericMethod)を使用するコードは、Native AOT 環境では metadata が削減されるため、動的な型引数解決が失敗する可能性があります。テストを trim friendly にすることで、Native AOT でのメタデータ削減時にもテストが正常に動作するようになります。
#124316 Merge branch 'release/8.0-staging' => 'release/8.0' (resolve conflicts)
- 作成者: @jkotas
- 作成日時: 2026年02月12日 03:53:30(UTC)
- マージ日時: 2026年02月12日 03:57:21(UTC)
- ラベル: NO-SQUASH Servicing-approved area-codeflow
概要
release/8.0-stagingからrelease/8.0へのマージコミット。Mono Hot Reload機能の空更新ハンドリング改善、Helixテスト環境のiOS/tvOS対応macOSバージョンアップデート(OSX.13.→OSX.15.)、および依存ライブラリ版のバージョン同期が含まれています。
変更内容
- src/mono/mono/component/hot_reload.c: Mono Hot Reload デルタ適用処理に空更新スキップ用のガード条件を追加(+4行/-2行)
- eng/pipelines/libraries/helix-queues-setup.yml / coreclr/templates/helix-queues-setup.yml: Helix CI/CDパイプラインのiOS/tvOS デバイステスト用キューをOSX.13.*からOSX.15.*へ更新(各5行変更)
- eng/Versions.props: Hot Reload生成ツール版およびMsQuic Schannel パッケージ版をバージョンアップ(+2行/-2行)
- eng/Version.Details.xml: マージブランチ状態に合わせて依存関係のバージョン/SHA値を同期(+4行/-4行)
パフォーマンスへの影響
影響なし。本変更は主にテスト基盤とツールチェーンの更新であり、ランタイムのパフォーマンスに直接的な影響はありません。ただしHot Reload機能の空更新スキップにより、不要な処理がスキップされるため、Hot Reload適用時のオーバーヘッドが軽微に削減される可能性があります。
関連Issue
なし
その他
本PRはrelease/8.0リリースブランチへのマージであり、マージコンフリクト解決を含みます。Copilotにより5ファイル中5ファイルがレビュー済みです。
#124315 [manual] [after revert] Merge release/9.0-staging into release/9.0
- 作成者: @jozkee
- 作成日時: 2026年02月12日 03:13:54(UTC)
- マージ日時: 2026年02月12日 06:36:48(UTC)
- ラベル: NO-SQUASH Servicing-approved area-codeflow
概要
release/9.0-stagingからrelease/9.0への手動マージです。主にCI/Helix インフラストラクチャ設定の更新が含まれており、macOS キューのロールフォーワード(OSX.13からOSX.15へ)、1ES イメージ選択の更新、COM相互運用テストの動作調整が行われています。
変更内容
Helix macOS キュー更新: libraries/coreclr パイプラインおよび SuperPMI 収集セットアップで、macOS キューを
OSX.13.*からOSX.15.*へ更新eng/pipelines/libraries/helix-queues-setup.ymleng/pipelines/coreclr/templates/helix-queues-setup.ymlsrc/coreclr/scripts/superpmi_collect_setup.py
1ES イメージ更新: source-build 内部プール イメージ名を
1es-azurelinux-3へ更新eng/common/core-templates/job/source-build.yml
ツール バージョン更新:
microsoft.dotnet.xharness.cliツール マニフェスト バージョンのバンプ.config/dotnet-tools.json
COM相互運用テスト調整:
ICustomQueryInterface.GetInterfaceの戻り値を強制失敗からNotHandledに変更src/tests/Interop/COM/ComWrappers/API/Program.cs
パフォーマンスへの影響
影響なし
本変更はCI/Helix インフラストラクチャ設定とテスト動作の調整であり、ランタイムコードへの変更は含まれていません。
関連Issue
なし
その他
- 本マージは、release/9.0-staging ブランチからの更新を release/9.0 ブランチに統合するための手動マージです
- Copilot が6ファイル中5ファイルを確認済みです
#124314 Merge branch 'release/8.0' => 'release/8.0-staging'
- 作成者: @jozkee
- 作成日時: 2026年02月12日 02:50:33(UTC)
- マージ日時: 2026年02月12日 03:58:47(UTC)
- ラベル: NO-SQUASH Servicing-approved linkable-framework area-codeflow
概要
このPRはrelease/8.0ブランチからrelease/8.0-stagingへの定期的なマージであり、複数の分野にわたるサービシング更新を含みます。主な変更は以下の通りです:
- COSE(暗号化オブジェクト署名と暗号化)メッセージのデコード改善:不定長マップ/配列とクリティカルヘッダー検証の処理を強化
- ILLink Trim分析の改善:拡張メソッドのデータフロー分析用テストケースを追加
- ストレステスト基盤の再構成:HttpStress/SslStressの共有スクリプト化とツール更新
- パイプライン・ビルド設定の更新:Helix キューの更新、タグフェッチの無効化、依存関係のバージョン更新
変更内容
暗号化関連(System.Security.Cryptography.Cose)
CoseMessage.cs:不定長マップ/配列のデコード処理を改善し、クリティカルヘッダー検証ロジックを強化(47行追加)CoseMessageTests.DecodeSign1.cs/CoseMessageTests.DecodeMultiSign.cs:クリティカルヘッダーのデコード負テストを追加(各125行以上)CoseMessageTests.Sign.CustomHeaderMaps.cs:不定長エンコーディングと確定長エンコーディングのカバレッジ拡張
ILLink/Trim分析
TrimAnalysisVisitor.cs、ParameterProxy.cs、MethodParameterValue.cs:ParameterProxyの構築方法を変更し、明示的なメソッドシンボルを要求- 新規テストケース
ExtensionsDataFlow.cs:拡張メソッドに対するリンカーデータフロー分析テスト
ストレステスト基盤
- 共有スクリプト導入:
build-local.sh/ps1、run-docker-compose.sh/ps1(System.Net.StressTests配下) - SslStress/HttpStress:コンテナイメージ更新、エントリポイント改善、共有スクリプトへの委譲
その他
eng/Versions.props他:MSBuild SDK、ICU transport、emsdk等の依存関係バージョン更新- パイプライン設定:macOS Helix キューの更新、タグフェッチ無効化、docker-compose v2への移行
パフォーマンスへの影響
COSE デコード処理
- 不定長マップ/配列の改善されたループ処理により、メモリ効率とデコード精度が向上
- クリティカルヘッダー検証の強化は、不正データの早期検出を可能にし、例外発生の効率化が期待される
HttpStress - HTTP/2マルチコネクション対応
StressClient.csでSocketsHttpHandlerのマルチコネクション有効化により、HTTP/2スループット向上が期待される
その他の変更はテスト基盤・ビルド設定がメインであり、パフォーマンスへの直接的な影響は最小限と考えられます。
関連Issue
記載なし
その他
- 互換性への影響:
ParameterProxyの構築変更は内部API(ILLink分
#124313 Revert "[manual] Merge release/9.0-staging into release/9.0"
- 作成者: @rbhanda
- 作成日時: 2026年02月12日 02:44:38(UTC)
- マージ日時: 2026年02月12日 02:46:49(UTC)
- ラベル: needs-area-label
概要
このPRは#124305で導入された変更をRevertするもので、release/9.0ブランチのテスト動作とビルド/パイプライン設定を復元します。COM相互運用テスト、Helix macOSキューの設定、source-buildエージェントイメージ、xharnessツールバージョンの4つの主要な変更が元に戻されます。
変更内容
- src/tests/Interop/COM/ComWrappers/API/Program.cs: COM apartment deadlock回帰テストの
ICustomQueryInterface.GetInterface結果処理を復元 - src/coreclr/scripts/superpmi_collect_setup.py: SuperPMI収集用macOS HelixキューをOSX 13に復元
- eng/pipelines/coreclr/templates/helix-queues-setup.yml: CoreCLRジョブのmacOS Helixキュー名をOSX 13に復元
- eng/pipelines/libraries/helix-queues-setup.yml: ライブラリジョブのmacOS Helixキュー名をOSX 13に復元
- eng/common/core-templates/job/source-build.yml: source-build用の内部1ESプールイメージを
Azure-Linux-3-Amd64に復元 - .config/dotnet-tools.json:
microsoft.dotnet.xharness.cliバージョンピンを9.0プレリリース版に復元
パフォーマンスへの影響
影響なし。このPRはビルド/テストインフラストラクチャの設定とテスト動作の復元であり、ランタイムのパフォーマンスに直接的な影響はありません。
関連Issue
#124305(このPRでRevertされる元の手動マージPR)
その他
なし
#124312 Revert "[automated] Merge branch 'release/8.0' => 'release/8.0-staging'"
- 作成者: @rbhanda
- 作成日時: 2026年02月12日 02:42:47(UTC)
- マージ日時: 2026年02月12日 02:47:21(UTC)
- ラベル: area-System.Security
概要
このPRは、自動マージPR #124246で導入されたCOSE(CBOR Object Signing and Encryption)関連の変更を完全に取り消すリバートです。COSE メッセージのデコーディングロジック、重要ヘッダー検証テスト、ビルドパイプライン設定、およびバージョン/依存関係の更新が全て戻されます。
変更内容
- COSE ライブラリ実装:
CoseMessage.csのデコーディングループと例外処理を取り消し、重要ヘッダー解析動作を元に戻す(9行追加、47行削除) - COSE テスト: DecodeSign1 およ DecodeMultiSign の重要ヘッダー負テストケースを削除(合計251行削除)
- テストヘルパー:
CoseMessageTests.Sign.CustomHeaderMaps.csの署名テストをシンプル化(署名ヘルパーの簡素化) - ビルド設定: パイプール設定を
ubuntu-latestホストイメージに変更、COSE ライブラリのサービシング/バージョンプロパティを戻す - バージョン管理:
Versions.props、Version.Details.xml、NuGet.configでバージョン情報と Emscripten マニフェスト依存関係を元に戻す
パフォーマンスへの影響
影響なし。本変更はリバートであり、機能削除とテスト数削減のため、テスト実行時間が短縮される可能性がありますが、ランタイム動作への直接的なパフォーマンス影響はありません。
関連Issue
dotnet/runtime #124246(本変更でリバート対象となった自動マージPR)
その他
注意点: このリバートにより、COSE メッセージデコーディングの重要ヘッダー検証ロジックが削除されるため、以前のバージョンの動作に戻ります。もし #124246 で修正されていた潜在的なバグがあれば、再度発生する可能性があります。リバート理由が明示されていないため、対象PR での問題内容を確認することが推奨されます。
#124311 Fix SYSLIB1045 quick fix for C# 14 extension members
- 作成者: @Copilot
- 作成日時: 2026年02月12日 02:35:14(UTC)
- マージ日時: 2026年02月12日 15:21:08(UTC)
- ラベル: area-System.Text.RegularExpressions
概要
SYSLIB1045コード修正が C# 14 の拡張メンバー(extension members)内で無効な partial extension(...) 構文を生成する問題を修正しました。拡張ブロック(ExtensionBlockDeclarationSyntax)は TypeDeclarationSyntax を継承していますが、partial 修飾子をサポートしないため、生成されたRegexプロパティは親クラスに配置されるよう修正されました。
// 修正前(無効)
partial extension(string value)
{
public bool Test() => MyRegex.IsMatch(value);
[GeneratedRegex(@"\d+")]
private static partial Regex MyRegex { get; }
}
// 修正後(有効)
extension(string value)
{
public bool Test() => MyRegex.IsMatch(value);
}
[GeneratedRegex(@"\d+")]
private static partial Regex MyRegex { get; }
変更内容
UpgradeToGeneratedRegexCodeFixer.cs
TryPartialize: 祖先型にpartialを追加する際、ExtensionBlockDeclarationSyntaxをフィルタリングCreateGeneratedRegexProperty: 拡張ブロックをスキップして親型を解決ConvertFieldToGeneratedRegexProperty/ConvertPropertyToGeneratedRegexProperty: 防御的にブロック内フィールド/プロパティを無視
UpgradeToGeneratedRegexAnalyzerTests.cs
CodeFixSupportsExtensionMembers_StaticInvocationテスト追加(拡張ブロック内の静的メソッド呼び出し)CodeFixSupportsExtensionMembers_Constructorテスト追加(コンストラクタパス)
パフォーマンスへの影響
影響なし
関連Issue
#124272
その他
本修正はC# 14の新機能である拡張メンバーへの対応です。コード修正が正しく親クラスにメンバーを配置するようになり、拡張ブロック内での GeneratedRegexAttribute の使用が適切にサポートされるようになりました。
#124310 [manual] Merge release/8.0-staging into release/8.0
- 作成者: @jozkee
- 作成日時: 2026年02月12日 02:20:32(UTC)
- マージ日時: 2026年02月12日 09:18:02(UTC)
- ラベル: NO-SQUASH Servicing-approved area-codeflow
概要
release/8.0-stagingからrelease/8.0への定期的なマージPRです。Monoのホットリロード機能の堅牢性向上、CI/CDのiOS/tvOSテスト環境のアップグレード、および8.0サービシング向けの依存関係・ビルド設定の更新が含まれています。
変更内容
- Mono (src/mono/mono/component/hot_reload.c): 空のホットリロードデルタ更新を無視するガード条件を追加
- COSE暗号化ライブラリ (System.Security.Cryptography.Cose.csproj):
GeneratePackageOnBuildプロパティを無効化 - CI/CD設定 (helix-queues-setup.yml): iOS/tvOSデバイスのHelixテストキューをOSX.13からOSX.15に更新
- ビルド設定 (eng/Versions.props、Version.Details.xml): HotReloadビルドツール、MsQuic Schannel、source-build参照パッケージのバージョンを更新
パフォーマンスへの影響
影響なし。本PR は CI/CD環境の整備、ビルド構成の調整、およびランタイム安定性の向上が目的であり、エンドユーザーの実行時パフォーマンスに直接的な変動はありません。
関連Issue
なし
その他
- ホットリロード改善の意図: 空のデルタ更新を処理する際のバグ防止により、デバッグ中のホットリロード機能の信頼性が向上します。
- テスト環境の重要性: iOS/tvOSのテスト環境をOSX.15に統一することで、より新しいAppleプラットフォーム上での検証品質が向上します。
- 本PRは自動マージではなく手動マージ (#manual タグ)であり、ステージング環境での検証後に本リリースブランチへの統合確認が行われています。
#124306 Fix failed ElidedBoundsChecks test
- 作成者: @EgorBo
- 作成日時: 2026年02月11日 23:50:38(UTC)
- マージ日時: 2026年02月12日 09:23:00(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT(Just-In-Time)コンパイラの値番号(VN)キャッシュに関する回帰バグの修正です。VNF_ADD(baseVN, const)パターンで分解されたVNがアサーションキャッシュに登録されていなかったため、範囲チェック(bounds-check)削除ロジックが関連するアサーションを見落とし、コード生成段階での境界チェックが削除されずテストが失敗していました。
変更内容
- src/coreclr/jit/assertionprop.cpp (+7行)
O2K_CHECKED_BOUND_ADD_CNSでの全局アサーション追加時に、分解されたVNF_ADDのオペランドVN(非定数入力)をアサーションキャッシュに追加登録- 登録を
checkedBound + 0形式に限定し、bounds-checkの非スロー(no-throw)アサーション形状に合致させる
パフォーマンスへの影響
改善。VNキャッシュの適切な登録により、JITコンパイラが冗長な境界チェックを正確に検出・削除できるようになるため、生成コードのサイズと実行時オーバーヘッドが削減されます。
関連Issue
- https://github.com/dotnet/runtime/pull/124132(VNキャッシュの導入)
- https://github.com/dotnet/runtime/pull/124242(VN分解ロジックの追加)
その他
2つのPRのマージ時に不整合が発生した回帰バグ(merge conflict issue)です。ElidedBoundsChecksテストが失敗していた原因は、VNキャッシュが分解されたVNを追跡していなかったため、アサーション伝播ロジックが最適化の判断材料となるアサーション情報を見つけられなかったことにあります。
#124305 [manual] Merge release/9.0-staging into release/9.0
- 作成者: @jozkee
- 作成日時: 2026年02月11日 23:47:33(UTC)
- マージ日時: 2026年02月12日 02:10:56(UTC)
- ラベル: NO-SQUASH Servicing-approved area-codeflow
概要
release/9.0-stagingからrelease/9.0へのマニュアルマージです。COM相互運用性テストの動作修正、macOSのHelixキュー名の更新(OSX.13からOSX.15へ)、および1ESソースビルドインフラストラクチャの更新が含まれます。
変更内容
- src/tests/Interop/COM/ComWrappers/API/Program.cs:
ICustomQueryInterface.GetInterfaceの戻り値をFailedからNotHandledに修正 - src/coreclr/scripts/superpmi_collect_setup.py: macOS Helixキュー選択をOSX.13からOSX.15に更新
- eng/pipelines/libraries/helix-queues-setup.yml: macOS/iOS/tvOS Helixキュー名をOSX.15.*.Openに更新
- eng/pipelines/coreclr/templates/helix-queues-setup.yml: macOS/iOS/tvOS Helixキュー名をOSX.15に更新(公開/内部適用)
- eng/common/core-templates/job/source-build.yml: 内部1ESソースビルドプールイメージ識別子を更新
- .config/dotnet-tools.json:
microsoft.dotnet.xharness.cliツールバージョンをバンプ
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このマージは主にインフラストラクチャとテスト関連の更新です。COM相互運用性テストの動作修正は、ICustomQueryInterfaceの仕様に準拠した正確な戻り値を返すようになり、テストの信頼性が向上します。Helixキューの更新はCI/テスト実行環境の最新化に関連しています。
#124302 Remove RequiresProcessIsolation from AsyncCovariantReturn
- 作成者: @MichalStrehovsky
- 作成日時: 2026年02月11日 22:47:27(UTC)
- マージ日時: 2026年02月12日 08:10:30(UTC)
- ラベル: needs-area-label
概要
AsyncCovariantReturn テストから RequiresProcessIsolation 属性を削除し、プロセス分離の強制を解除しました。これにより、テストが統合 Loader テストランナーの一部として実行され、スタンドアロンプロセスとしての実行オーバーヘッドが削減されます。
変更内容
- src/tests/Loader/classloader/MethodImpl/CovariantReturns/UnitTest/AsyncCovariantReturn.csproj:
<RequiresProcessIsolation>true</RequiresProcessIsolation>の削除(3行削除)
パフォーマンスへの影響
改善: テスト実行時間の短縮
- 独立したプロセス起動オーバーヘッドが排除される
- テストが
Loaderテストランナーに統合されることで、プロセス生成・初期化コストが削減 - CI/CD パイプラインでのテスト実行時間が短縮される可能性あり
関連Issue
- Issue #124238(推奨される最終的な解決方法として言及)
その他
作成者のコメントによると、Issue #124238 でのテスト実装時に、このテストの削除が検討されている可能性があります。現在は一時的なコスト削減措置として実施されています。
#124295 Rename Future references to Task throughout codebase
- 作成者: @Copilot
- 作成日時: 2026年02月11日 20:41:17(UTC)
- マージ日時: 2026年02月12日 15:05:13(UTC)
- ラベル: area-System.Threading.Tasks
概要
このPRは、.NET runtimeの内部実装における従来の「FutureFuture.cs → Task_T.cs、FutureFactory.cs → TaskFactory_T.cs)、デバッガプロキシ型名の更新、およびテストコードのコメント・変数名の統一を含みます。
変更内容
コア実装ファイル(System.Private.CoreLib):
Future.cs→Task_T.csにリネームFutureFactory.cs→TaskFactory_T.csにリネーム- debugger proxy型名を
SystemThreadingTasks_FutureDebugView→SystemThreadingTasks_TaskDebugViewに更新 - ローカル変数名を
continuationFuture→continuationTaskに変更 - プロジェクトファイル(
System.Private.CoreLib.Shared.projitems)でファイル参照を更新
テストファイル(System.Runtime.Tests):
- 13個のテストファイルで「Future」関連の用語を「Task with result」または「Task
」に統一 - テストメソッド名、ローカル変数、コメント、デバッグ出力文字列を更新
- XML doc コメントで
Task<TResult>表記を使用(エスケープ不要)
バグ修正:
- TaskFactory_FromAsyncTests.cs で
asyncTask.Wait()→asyncTaskWithResult.Wait()に修正
パフォーマンスへの影響
影響なし。本変更は命名規則の統一およびファイルの体系化を目的とした変更であり、実行時の動作やパフォーマンスに影響を与えません。
関連Issue
なし
その他
- このリファクタリングは過去の命名規則との一貫性を高め、コードベースの保守性を向上させるものです
- ファイル名とクラス名の統一により、
TaskCompletionSource_T.csパターンとの一貫性が確保されます - 公開API(パブリッククラスやメソッド)の変更はなく、内部実装のみの変更です
- レビュー過程でドキュメント表記の改善と用語の正確さが強化されています
#124294 Fix NIndex/NRange ToString truncation on 64-bit: cast to nuint instead of uint
- 作成者: @Copilot
- 作成日時: 2026年02月11日 20:15:48(UTC)
- マージ日時: 2026年02月12日 04:04:35(UTC)
- ラベル: area-System.Numerics.Tensors
概要
NIndex と NRange の ToString() メソッドが 64 ビットプラットフォームで uint.MaxValue を超える値を切り詰める問題を修正しました。キャスト時に uint ではなく nuint を使用することで、大きな値の正確な文字列表現を実現します。
// 修正前:^0 と表示される(切り詰め)
var ni = NIndex.FromEnd(unchecked((nint)(1L + uint.MaxValue)));
Console.WriteLine(ni.ToString()); // "^0"
// 修正後:^4294967296 と正確に表示される
Console.WriteLine(ni.ToString()); // "^4294967296"
変更内容
- NIndex.cs:
ToStringFromEnd()メソッド内の(uint)Valueを(nuint)Valueに変更 - NRange.cs:
ToString()メソッド内の(uint)Start.Valueと(uint)End.Valueを(nuint)Start.Valueと(nuint)End.Valueに変更 - NIndexTests.cs: 既存の
[Fact]テストを[Theory]+[InlineData]に変更し、64 ビットプロセス専用の条件付きテストケースを追加 - NRangeTests.cs: 同様にテスト構造を改善し、
uint.MaxValueを超える値のテストカバレッジを拡大
パフォーマンスへの影響
影響なし。型キャストの変更のみで、ランタイムパフォーマンスへの実質的な影響はありません。
関連Issue
なし
その他
この修正は 64 ビットプラットフォーム固有の問題です。32 ビットプラットフォームでは nint と uint が同じサイズであるため、この問題は発生しません。追加されたテストは PlatformDetection.Is64BitProcess 条件で保護されています。
#124293 Fix NullReferenceException in RuntimeParameterInfo.GetCustomAttributesData()
- 作成者: @Copilot
- 作成日時: 2026年02月11日 20:11:03(UTC)
- マージ日時: 2026年02月12日 13:11:56(UTC)
- ラベル: area-System.Reflection
概要
RuntimeParameterInfo.GetCustomAttributesData() がメタデータを持たないパラメータ(DynamicMethodのデリゲート、ランタイム生成メソッドなど)で呼び出された際に発生する NullReferenceException を修正します。同じ ICustomAttributeProvider リージョン内の他の3つのメソッドと同様に、メタデータ不在時にnullトークンガードを追加し、空のリストを返すように統一します。
// 修正前(例外を発生)
var attrs = delegateParameter.GetCustomAttributesData(); // NullReferenceException
// 修正後(空のリストを返す)
var attrs = delegateParameter.GetCustomAttributesData(); // IList<CustomAttributeData>(空)
変更内容
RuntimeParameterInfo.cs:
GetCustomAttributesData()メソッドにMdToken.IsNullToken(m_tkParamDef)ガードを追加。メタデータが存在しない場合は空の配列を返却。既存のGetCustomAttributes(bool)、GetCustomAttributes(Type, bool)、IsDefined(Type, bool)と同じパターンに統一。ParameterInfoTests.cs: DynamicMethodを使用してメタデータなしのデリゲートパラメータを作成し、
GetCustomAttributesData()が例外を発生させずに空のリストを返すことを検証する回帰テストを追加。テストはPlatformDetection.IsReflectionEmitSupportedで Native AOT 互換性をゲート制御。
パフォーマンスへの影響
影響なし。null チェック(単純な条件判定)の追加のため、オーバーヘッドはほぼ無視できるレベル。
関連Issue
#124293
その他
実用的な背景: NullabilityInfoContext.Create(ParameterInfo) がデリゲート由来のパラメータに対して GetCustomAttributesData() を呼び出す際にこの問題が顕在化します。AIFunctionFactory など reflection ベースの機能で実際に報告される問題。
#124292 Make GetGetDotNetCert clone the certificate for reliability
- 作成者: @bartonjs
- 作成日時: 2026年02月11日 19:46:34(UTC)
- マージ日時: 2026年02月12日 02:51:41(UTC)
- ラベル: area-System.Security test-enhancement
概要
Unix環境のX509証明書テストにおけるオブジェクトライフタイム問題を修正するPull Requestです。GetGetDotNetCertメソッドが返す証明書をクローン化することで、CrlDiskCacheRecoversテストで発生していたハンドル無効化の問題に対処します。
変更内容
- ファイル:
src/libraries/System.Security.Cryptography/tests/X509Certificates/X509FilesystemTests.Unix.csRemoteCertificateValidationCallback内で、サーバー証明書をX509CertificateLoaderを使用してエクスポート・再読み込みする方式でクローン化Subjectプロパティへのアクセスとアサーションを追加し、無効なハンドル問題をより早期に検出
パフォーマンスへの影響
テスト時のみの変更のため、本番コードへのパフォーマンス影響なし。ただしテスト実行時に証明書のエクスポート・再読み込みが追加されるため、テスト自体の実行時間はわずかに増加する可能性があります。
関連Issue
#124279に寄与します。#124292に対応するPull Requestです。
その他
このPRはセキュリティではなく、テスト信頼性向上を目的とした修正です。Unix環境における証明書ハンドルのライフタイム管理に関する既知の問題に対する回避策として実装されています。
#124291 Remove nullcheck effect from array len (global AP)
- 作成者: @EgorBo
- 作成日時: 2026年02月11日 19:18:15(UTC)
- マージ日時: 2026年02月12日 16:29:54(UTC)
- ラベル: area-CodeGen-coreclr
概要
配列長(array len)操作に関連するnull check効果をグローバルアサーション伝播(Global AP)から削除する最適化を実装しました。これは#93531と同様の変更ですが、CSE(Common Subexpression Elimination)の問題によりグローバルAPのみに限定されています。JITコンパイラの最適化パスにおいて、不要なnull checkを削除することでコード生成を改善します。
変更内容
src/coreclr/jit/assertionprop.cpp (+14/-3)
- 配列長操作のnull check効果をグローバルアサーション伝播から削除するロジックを追加
src/coreclr/jit/gentree.cpp (+3/-0)
- 関連する樹構造操作の変更
src/coreclr/jit/optimizebools.cpp (+1/-0)
- ブール値最適化ロジックの小規模な調整
パフォーマンスへの影響
改善: 配列長操作から不要なnull checkが削除されることで、生成されるマシンコードのサイズが削減され、命令キャッシュ効率が向上する可能性があります。
懸念点: CSE問題が完全には解決されていないため、グローバルAPのみの適用に限定されています。ローカルAPでの有効化は今後の改善が必要です。
関連Issue
- #93531(同様の最適化の先行実装)
その他
本変更はCSE(Common Subexpression Elimination)最適化との相互作用に関する既知の問題があるため、慎重にグローバルAPのみに適用されています。
#124290 JIT: clear must keep flag for blocks created in GDV expansions
- 作成者: @AndyAyersMS
- 作成日時: 2026年02月11日 19:14:44(UTC)
- マージ日時: 2026年02月12日 15:16:22(UTC)
- ラベル: area-CodeGen-coreclr
概要
GDV(Guarded Devirtualization)拡張時に、JITがBBF_DONT_REMOVEフラグを過度に伝播していた問題を修正します。try ブロックの最初のブロックなど、"must keep"ブロック内のGDVが展開される場合、新しく作成されたブロックがこのフラグを不正に継承してしまっていました。本修正により、スプリット後の残余ブロックおよび展開パスで新規挿入されたすべてのブロックでBBF_DONT_REMOVEフラグをクリアします。
変更内容
- src/coreclr/jit/indirectcalltransformer.cpp:
fgSplitBlockAfterStatementで生成される残余ブロック上のBBF_DONT_REMOVEフラグをクリア- GDV拡張パスで挿入される新規ブロックすべてについて
BBF_DONT_REMOVEフラグをクリア
パフォーマンスへの影響
JITコンパイル最適化フローの改善により、不要なブロック保持が削減され、コード削除・最適化パスの効率が向上します。ただし実測データが提供されていないため、定量的なパフォーマンス向上の具体値は不明です。
関連Issue
なし
その他
- この修正は基本ブロック(BB)のメタデータ管理に関する低レベルなJIT最適化の修正です
- 変更量が小規模(+2/-0)で、フラグクリア処理の追加のみとなっています
- GDV は仮想呼び出しの投機的デバイルチュアライゼーション機能で、C#のポリモーフィズムの最適化に関連しています
#124286 JIT: some GT_INDEX_ADDRs won't need throw helpers
- 作成者: @AndyAyersMS
- 作成日時: 2026年02月11日 18:06:50(UTC)
- マージ日時: 2026年02月12日 22:20:13(UTC)
- ラベル: area-CodeGen-coreclr
概要
JIT コンパイラの最適化により、GT_INDEX_ADDR ノードに対する throw ヘルパーの生成を削減し、非最適化メソッドのコード サイズを削減します。また、モルフ後のグラフから GT_ARR_ELEM が現れないようにしています。
変更内容
- gtlist.h:
GT_INDEX_ADDRノードの定義を修正 - lsraarm.cpp, lsraarm64.cpp, lsraloongarch64.cpp, lsrariscv64.cpp, lsraxarch.cpp: 各アーキテクチャの線形スキャン レジスタ アロケータから
GT_ARR_ELEM関連の処理ロジックを削除(計34行削除) - stacklevelsetter.cpp: スタック レベル設定ロジックの調整(4行追加、2行削除)
パフォーマンスへの影響
改善点: 非最適化メソッドのコード サイズが削減されます。throw ヘルパーの不要な生成が排除されることで、生成されるネイティブ コードのサイズが縮小します。
関連Issue
なし
その他
この変更は複数のアーキテクチャ(ARM、ARM64、LoongArch64、RISC-V64、x86/x64)に対して一貫して適用されており、アーキテクチャ間のコンパイラ動作の統一性を向上させています。GT_ARR_ELEM ノードがモルフ段階後に現れないという制約を強化することで、JIT パイプラインの後続段階での処理簡略化に貢献しています。
#124284 Remove redundant range checks in Uri scheme parsing
- 作成者: @MihaZupan
- 作成日時: 2026年02月11日 16:33:19(UTC)
- マージ日時: 2026年02月12日 03:18:36(UTC)
- ラベル: area-System.Net
概要
URI スキーム解析の冗長な範囲チェックを削除し、パフォーマンスオーバーヘッドを軽減する変更です。#121262 で JIT がスキップ可能な範囲チェックを正しく最適化できるようになったため、ParseSchemeCheckImplicitFile メソッドの早期検証条件を簡略化しました。
// 削除された冗長な範囲チェック
// if ((uint)i < scheme.Length && (uint)(i + 1) < scheme.Length)
// を削除し、最適化後は JIT が自動的に不要なチェックを除去
変更内容
- src/libraries/System.Private.Uri/src/System/Uri.cs
ParseSchemeCheckImplicitFileメソッド内の冗長な(uint)iおよび(uint)(i + 1)範囲チェックを削除- 変更行数: +1/-5(正味 -4行)
パフォーマンスへの影響
改善あり - ホットパスでのオーバーヘッド削減
- URI スキーム解析は頻繁に呼び出されるパスのため、冗長な範囲チェック命令の削除により CPU サイクルが削減
- JIT による dependent range check の最適化(#121262)により、明示的なチェックコードは不要
- 削除されたコードは単なるオーバーヘッドだったため、正確性に影響なし
関連Issue
- #121262(JIT の dependent range check 最適化に関連)
その他
なし
#124282 Fix S.N.Tensors SLNX to remove project file that no longer exists
- 作成者: @vcsjones
- 作成日時: 2026年02月11日 16:21:56(UTC)
- マージ日時: 2026年02月12日 00:06:23(UTC)
- ラベル: area-System.Numerics.Tensors
概要
System.Numerics.Tensors.slnx ソリューションフィルターから、以前削除されたテストプロジェクト System.Numerics.Tensors.Net8.Tests.csproj への参照を削除するメンテナンス修正です。ソリューション定義とリポジトリの実際のプロジェクト構成を同期させています。
変更内容
- System.Numerics.Tensors.slnx:
tests/Net8Tests/System.Numerics.Tensors.Net8.Tests.csprojの参照を削除(-1行)
パフォーマンスへの影響
影響なし
関連Issue
関連PR: #121853(当該テストプロジェクトが削除された変更)
その他
このは純粋なソリューション定義のクリーンアップです。削除済みプロジェクトファイルへの参照が SLNX に残されていたため、開発環境でのソリューション読み込み時に不整合が生じていた可能性があります。
#124270 [browser] rename test-main.mjs
- 作成者: @pavelsavara
- 作成日時: 2026年02月11日 13:21:49(UTC)
- マージ日時: 2026年02月12日 21:29:05(UTC)
- ラベル: arch-wasm area-System.Runtime.InteropServices.JavaScript os-browser
概要
ブラウザベースのWebAssembly(WASM)テストの実行時に、V8テスティングが--moduleフラグなしで動作するよう、テストエントリーポイントファイルをtest-main.jsからtest-main.mjsにリネームしました。これにより、ESモジュール形式として明示的に認識されるようになり、V8のモジュール処理が改善されます。
変更内容
- テストエントリーポイント:
test-main.js→test-main.mjsにリネーム - ビルド設定ファイル: 17ファイルの参照更新(.targets、.cmd、.sh、HTML、csproj)
eng/testing/WasmRunnerTemplate.cmd/.shsrc/mono/browser/配下のビルド・テスト設定src/tests/Common/配下のWASQL テストランナー設定
パフォーマンスへの影響
影響なし。この変更はテストファイルの命名規則の変更であり、実行時のパフォーマンスに直接的な影響はありません。ただし、ESモジュール形式(.mjs)の明示的な使用により、V8のモジュール解析が最適化される可能性があります。
関連Issue
なし
その他
作成者の概要に記載されているとおり、ベンチマーク関連ファイルについても今後の対応が予定されています。test-main.jsをmain.jsとして使用しているベンチマークテストについても、同様の対応が必要になる見込みです。
#124256 Add SIGKILL to PosixSignal enumeration
- 作成者: @Copilot
- 作成日時: 2026年02月11日 07:33:10(UTC)
- マージ日時: 2026年02月12日 14:17:40(UTC)
- ラベル: area-System.Runtime.InteropServices
概要
PosixSignal 列挙型に SIGKILL = -11 を追加します。SIGKILL は POSIX セマンティクスに従い catch または ignore できないシグナルです。登録を試みると OS が自動的に例外をスローするため、マネージコード層での検証は不要です。
変更内容
- PosixSignal.cs:
SIGKILL = -11を追加、Windows 非対応属性と XML ドキュメント付き - ref/System.Runtime.InteropServices.cs: 参照アセンブリに
SIGKILL = -11を追加 - pal_signal.h/c: ネイティブレイヤーで
SIGKILLのマッピングを追加(GetPlatformSignalNumber、TryConvertSignalCodeToPosixSignal) - テスト: Unix で
UninstallableSignals()に SIGKILL を追加。SupportedSignalsとPosixSignalAsRawValuesからは除外
パフォーマンスへの影響
影響なし
関連Issue
#123380
その他
- SIGKILL 登録時の例外処理は OS 側で自動的に行われます:
- Unix:
IOExceptionがスロー - Windows:
PlatformNotSupportedExceptionがスロー
- Unix:
- 破壊的変更はなく、既存の POSIX シグナル処理との互換性は維持されます
#124246 [automated] Merge branch 'release/8.0' => 'release/8.0-staging'
- 作成者: @github-actions[bot]
- 作成日時: 2026年02月10日 22:13:49(UTC)
- マージ日時: 2026年02月12日 02:11:17(UTC)
- ラベル: Servicing-approved needs-area-label
概要
release/8.0ブランチからrelease/8.0-stagingブランチへの自動マージPRです。複数の貢献者による変更を統合します。主な変更はSystem.Security.Cryptography.COSE(暗号化メッセージ署名フォーマット)関連で、CoseMessageクラスのデコード機能拡張とテストケース追加が含まれています。
変更内容
- NuGet.config, eng/Version.Details.xml, eng/Versions.props: 依存ライブラリバージョン更新
- pipelines/evaluate-paths-job.yml: ビルドパイプライン設定の調整
- System.Security.Cryptography.Cose.csproj: プロジェクトメタデータ更新
- CoseMessage.cs: デコード機能の拡張実装(47行追加、9行削除)
- CoseMessageTests.DecodeMultiSign.cs: マルチシグネチャデコードテスト新規追加(126行)
- CoseMessageTests.DecodeSign1.cs: 単一署名デコードテスト新規追加(125行)
- CoseMessageTests.Sign.CustomHeaderMaps.cs: カスタムヘッダーテスト拡張(35行追加、20行削除)
パフォーマンスへの影響
影響なし(マージコミットであり、機能追加・テスト追加が主体)
関連Issue
なし
その他
本PRは自動生成されたbranch統合で、リベース・スクイャッシュではなくマージコミットでの統合が必須です。マージ競合がある場合は手動解決が必要となります。.NET Runtime 8.0リリースブランチの定期的な同期処理の一環です。
#124240 ci-analysis: structured output, MCP integration, and deep investigation guides
- 作成者: @lewing
- 作成日時: 2026年02月10日 19:30:10(UTC)
- マージ日時: 2026年02月12日 07:55:48(UTC)
- ラベル: area-skills
概要
dotnet/runtimeのCI分析スキル向けの大規模なアップデート。PowerShellスクリプトGet-CIStatus.ps1に構造化JSON出力とMCP(Model Context Protocol)統合を追加し、推奨事項をデータ駆動型に変更。複数の深掘り調査ガイドを新規追加し、トークン効率を維持しながら詳細な調査ワークフローをサポート。
// JSON出力例(CI_ANALYSIS_SUMMARY)
{
"recommendationHint": "KNOWN_ISSUES_DETECTED",
"failedJobDetails": [
{
"jobName": "Build-x64",
"errorCategory": "test-failure",
"errorSnippet": "..."
}
],
"knownIssues": [...]
}
変更内容
Get-CIStatus.ps1 (+228/-132)
[CI_ANALYSIS_SUMMARY]JSONブロックを末尾に追加(ビルド、失敗ジョブ、既知の問題、推奨事項など)- 47行の条件分岐ロジックを単一の
recommendationHintフィールド(BUILD_SUCCESSFUL、KNOWN_ISSUES_DETECTED、LIKELY_PR_RELATEDなど6種類)に統合 failedJobDetailsにerrorCategory(test-failure、build-error、test-timeout、crashなど)とエラースニペットを追加- タイムアウトパターン検出の改善(従来は検出されない「Timed Out (timeout」に対応)
- 早期continue時のジョブサマリー計算バグを修正
SKILL.md (+115/-137)
- Step 0: コンテキスト収集(PR型分類テーブル)を新規追加
- Step 3: 検証前チェックリストを追加
- ビルド進行状況分析とMCPツール参照を改善
- トークン削減(~4.6K → ~3.5K)
参考資料の新規追加
references/build-progression-analysis.md:SQLベースの進捗追跡、triggerInfo.pr.sourceShaを使用references/delegation-patterns.md:サブエージェント委譲パターン(並列アーティファクト抽出、キャンセルジョブ回復)references/azure-cli.md、references/binlog-comparison.mdなど深掘り調査ガイド
パフォーマンスへの影響
影響なし。トークン効率が向上(SKILL.mdは削減、新しい参考資料は別ファイルで管理)。MCP統合により機械的な推論がスクリプトから分離され、エージェントの判断負荷が軽減。
関連Issue
なし
その他
- 設計原則:スクリプトは構造化JSONデータを出力、推奨事項生成はエージェントに委譲(データ/推論の分離)
- MCP優先戦略:AzDO MCP(
get_builds、get_build_log_by_id)とHelix MCP(hlx_status、hlx_logs)を一次手段として配置、CLI/スクリプトは代替手段 - テスト実施:複数モデル(Sonnet 4、GPT-5、Opus 4.5)での検証、実プロジェクトPR#123245等での検証済み
- Copilot指摘
#124176 Add support for binding FormatterOptions from config file
- 作成者: @mrek-msft
- 作成日時: 2026年02月09日 13:28:01(UTC)
- マージ日時: 2026年02月12日 14:56:40(UTC)
- ラベル: area-Extensions-Logging
概要
EventLogLogger がアプリケーション設定ファイルから FormatterOptions をバインドできるようになりました。WebApplication.CreateBuilder で Logging:EventLog セクションの設定を自動的に認識・適用します。Console ロガーと同様の構成メカニズムを実装し、設定駆動型のロギング動作が可能になります。
// appsettings.json
{
"Logging": {
"EventLog": {
"SourceName": "MyApplication",
"IncludeScopes": true,
"LogLevel": {
"Default": "Information"
}
}
}
}
変更内容
- EventLogConfigureOptions.cs (+31 行):
IConfigureOptions<EventLoggerOptions>を実装する新クラスを追加。設定ファイルから EventLog セクションをバインド - EventLoggerFactoryExtensions.cs (+5 行): AddEventLog 拡張メソッドに設定バインディング機能を統合
- Microsoft.Extensions.Logging.EventLog.csproj (+9 行): 設定バインディング機能に必要な依存関係を追加
- EventLogLoggerTest.cs (+50 行): 設定ファイルからのバインディング動作を検証するテストケース追加
パフォーマンスへの影響
影響なし。設定バインディングは初期化時の一度のみ実行される処理で、ロギング実行時のオーバーヘッドはありません。
関連Issue
#80724 (WebApplication.CreateBuilder ignores Logging:EventLog:SourceName)
その他
- 破壊的変更の可能性あり:動的な設定読み込みの追加により、既存コードの動作が変更される場合があります
- レガシー非推奨メソッド(AddEventLog の古いオーバーロード)では設定バインディングが適用されません(Console ロガーと同じ仕様)
- EventLogSettings メンバー (Filter, EventLog) について、将来の設定ソースジェネレータ拡張時に干渉される可能性があります
- 命名規則として EventLogConfigureSettings(従来慣例)vs EventLogConfigureOptions(インターフェース命名に合致)の検討が残っています(内部クラスのため問題軽微)
#124168 Make CoreCLR + crossgen2 ioslike via --dynamiccodecompiled false
- 作成者: @BrzVlad
- 作成日時: 2026年02月09日 08:32:12(UTC)
- マージ日時: 2026年02月12日 10:47:34(UTC)
- ラベル: area-CodeGen-Interpreter-coreclr
概要
このPRは、デスクトップ環境でiOSと同様の動的コード生成が禁止される環境をシミュレートするための --dynamiccodecompiled false ビルドオプションを追加しています。このオプションにより、JITを無効化し、インタプリタを有効化し、キャッシュされたインターフェースディスパッチを有効化するなど、iOS同等の制約をデスクトップで検証できます。
// ビルドコマンド例
// ./build.sh -subset clr -c Release -dynamiccodecompiled false
変更内容
- ビルドスクリプト (eng/build.ps1, eng/build.sh):
--dynamiccodecompiledフラグの追加 - 機能定義ファイル (clr.featuredefines.props, clrdefinitions.cmake, clrfeatures.cmake): 動的コード生成無効時の機能フラグ制御
- CoreCLRランタイム部分 (vm/codeman.cpp, vm/jitinterface.cpp等): JIT無効化、インタプリタ有効化、キャッシュインターフェースディスパッチ有効化
- ReadyToRun/crossgen2 (ILCompiler.ReadyToRun/Compiler/ReadyToRunCompilerContext.cs): crossgen2コンパイル済みイメージでのキャッシュインターフェースディスパッチサポート追加
- 実行可能メモリ関連 (utilcode/executableallocator.cpp): 動的コード生成制約下での対応
パフォーマンスへの影響
動的コード生成禁止時のパフォーマンス特性:
- JIT無効化により、インタプリタ実行のオーバーヘッドが増加
- キャッシュインターフェースディスパッチにより、仮想呼び出しのディスパッチコスト削減
- 具体的な数値は提供されていません
関連Issue
#124168
その他
⚠️ コード品質上の注意点: Copilotにより、ReadyToRunCompilerContext.cs の113行目で未定義変数 arch と不正な列挙値の使用が指摘されています。Target.Architecture の使用と TargetArchitecture.Wasm (存在しない) から TargetArchitecture.Wasm32 への修正が必要な可能性があります。
#123783 Fix BigInteger char parsing with Ukrainian culture NBSP handling (bidirectional)
- 作成者: @Copilot
- 作成日時: 2026年01月30日 01:56:02(UTC)
- マージ日時: 2026年02月12日 06:10:06(UTC)
- ラベル: area-System.Numerics
概要
BigInteger のパース時にウクライナ文化(uk-UA)で使用される NBSP(U+00A0)と通常のスペース(U+0020)の間の互換性を修正しました。ウクライナ文化はNumberGroupSeparatorとして NBSP を使用しますが、ユーザーが通常のスペースを入力した場合のパース失敗を解決するため、MatchChars関数の空白文字の正規化ロジックを双方向に改良しました。
// 修正前のロジック
// 複雑な条件式で NBSP/space の変換を処理
// 修正後のロジック
NormalizeSpaceReplacingChar(cp) != NormalizeSpaceReplacingChar(val)
// 双方向の空白文字の等価性を簡潔に実現
変更内容
src/libraries/Common/src/System/Number.Parsing.Common.cs
MatchChars関数にNormalizeSpaceReplacingCharヘルパーメソッドを追加- NBSP(U+00A0)と narrow NBSP を通常のスペースに正規化
- 双方向の空白文字等価性を実現(NBSP→space、space→NBSP)
- ウクライナ文化に関するコメントを追加
src/libraries/System.Runtime.Numerics/tests/BigInteger/parse.cs
ParseWithNBSPAsGroupSeparator()テストメソッドを追加- カスタム文化(en-US ベース)で NBSP を
NumberGroupSeparatorに設定 - 通常のスペース含む入力("1 234 567")が正しくパースされることを検証
パフォーマンスへの影響
影響なし。本修正は BigInteger の文字(UTF-16)パースのみに限定され、複雑な条件式を簡潔なヘルパー関数に置き換えることで可読性が向上しますが、パフォーマンス上の悪影響はありません。
関連Issue
#120283(元の BigInteger パース失敗)、#124016(UTF-8 パースの関連課題)
その他
- 本修正は char(UTF-16)パースのみが対象で、UTF-8 パースは別途対応予定
- Complex、double、float、decimal などの他の数値型には影響しない(異なるパース基盤を使用)
- テストはシステムの ICU バージョンに依存しないポータブル実装
#123752 Fix Task debug proxy Result behavior and rename from Future
- 作成者: @Copilot
- 作成日時: 2026年01月29日 13:04:49(UTC)
- マージ日時: 2026年02月12日 23:20:51(UTC)
- ラベル: area-System.Threading.Tasks
概要
Task<TResult>のデバッグプロキシが、失敗またはキャンセルされたタスクのResultプロパティに対してdefault(TResult)を表示していた問題を修正しました。修正後は、実際の動作に合わせて例外をスローするようになります。また、古い命名「Future」を「TaskOfTResult」に統一しました。
// 修正前
public TResult? Result => m_task.Status == TaskStatus.RanToCompletion ? m_task.Result : default;
// 修正後
public TResult Result => m_task.IsCompleted ? m_task.Result : default!;
変更内容
- Task_T.cs: デバッグプロキシクラス
SystemThreadingTasks_FutureDebugView<TResult>をSystemThreadingTasks_TaskOfTResultDebugView<TResult>にリネーム - Task_T.cs:
Resultプロパティをm_task.Resultに委譲し、完了状態をIsCompletedで確認するように変更 - TaskDebugViewTests.cs: デバッグプロキシ動作の包括的なテスト6件を追加
- 正常完了時の結果返却テスト(参照型・値型)
- 失敗時のAggregateException スロータイル
- キャンセル時のAggregateException スロータイル
- 実行中タスク時のデフォルト値返却テスト(ブロッキングなし)
- Status/Exception プロパティの正確性確認
パフォーマンスへの影響
影響なし。デバッグプロキシは開発時のデバッグ表示専用であり、実行時パフォーマンスへの影響はありません。IsCompletedチェックはブロッキング防止のためメリットがあります。
関連Issue
#123751 - Task<T>デバッグプロキシのResult表示が誤解を招く問題
その他
- デバッグプロキシは実行時動作に影響せず、Visual Studioなどのデバッガ表示のみに作用します
IsCompletedチェックにより、未完了タスクを検査時にブロッキングすることなく安全にデバッグ表示できます- 「Future」という古い名称の統一により、コードの可読性が向上しています
#123686 Add AttributeTargets.Interface to ExcludeFromCodeCoverageAttribute and StackTraceHiddenAttribute
- 作成者: @Copilot
- 作成日時: 2026年01月27日 20:07:48(UTC)
- マージ日時: 2026年02月12日 16:41:23(UTC)
- ラベル: area-System.Diagnostics
概要
C# 8+で導入されたインターフェースのデフォルト実装メンバーに対応するため、ExcludeFromCodeCoverageAttributeとStackTraceHiddenAttributeにAttributeTargets.Interfaceを追加しました。これにより、デフォルト実装を含むインターフェースに対して両属性を適用できるようになります。
[ExcludeFromCodeCoverage]
public interface ILogger
{
void Log(string message);
// デフォルト実装メソッドがコードカバレッジから除外される
void LogWarning(string message) => Log($"[WARN] {message}");
}
変更内容
- ExcludeFromCodeCoverageAttribute.cs:
AttributeUsageにAttributeTargets.Interfaceを追加 - StackTraceHiddenAttribute.cs (本体およびNativeAOT版):
AttributeUsageにAttributeTargets.Interfaceを追加 - System.Runtime.cs: 参照アセンブリ内の両属性定義を更新
- テスト: インターフェースへの属性適用と、デフォルト実装メソッドがスタックトレースから隠れることを検証するテストを追加
- API互換性: 複数アセンブリ(System.Diagnostics.Tools.dll、System.Runtime.dll、netstandard.dll、System.dll)およびnetstandard2.1の互換性ベースラインに抑制エントリを追加
パフォーマンスへの影響
影響なし
関連Issue
#123405
その他
API Review で承認済みの変更です。既存の破壊的変更はなく、属性の適用範囲が拡張される純粋な互換性を保つ機能追加です。インターフェース内のデフォルト実装メソッドは実行可能なコードを含むため、コードカバレッジやスタックトレース非表示の対象として扱えることが重要です。
#123555 Fix race condition in channel completion
- 作成者: @stephentoub
- 作成日時: 2026年01月23日 19:02:23(UTC)
- マージ日時: 2026年02月12日 15:29:01(UTC)
- ラベル: area-System.Threading.Channels
概要
UnboundedChannel<T>のChannelReader.Completionでレース条件が発生し、すべてのアイテムが読み込まれてTryComplete()が呼び出されてもチャネルが完了しない問題を修正しました。TryReadがロック解放後に最後のアイテムをデキューする際の競合タイミングで、チャネル完了がトリガーされないケースに対応しています。
変更内容
- UnboundedChannel.cs:
TryCompleteメソッドにロック解放後の再チェック処理を追加。キューが空になった場合にチャネルを完了するロジックを実装 - UnboundedChannelTests.cs: 100,000回のイテレーションで
TryReadとTryCompleteの並行動作を再現する回帰テストを追加 - System.Threading.Channels.Tests.csproj: テストタイムアウト機能のため
TaskTimeoutExtensions.csへの参照を追加
パフォーマンスへの影響
TryCompleteメソッド内でのロック再チェック処理により、最悪ケースの実行パスでわずかなオーバーヘッドが発生する可能性があります。ただし、通常の操作フローではロック獲得の追加コストは最小限に留まる設計です。
関連Issue
#123544
その他
このレース条件は非常に再現が難しい問題のため、テストは10万回のイテレーションを実行することで高い確率で問題検出を実現しています。マルチスレッド環境でのChannel操作を使用しているアプリケーションに対する重要な安定性向上です。
#123435 Fix WriteOnceBlock race condition where ReceiveAsync returns null
- 作成者: @Copilot
- 作成日時: 2026年01月21日 15:29:07(UTC)
- マージ日時: 2026年02月12日 15:38:54(UTC)
- ラベル: area-System.Threading.Tasks
概要
WriteOnceBlock<T>.ReceiveAsync が Post との並行実行時に null を返す競合状態を修正しました。原因は _header を _value より先に設定していたため、読み込み側が HasValue == true を観察しながら _value がまだ未初期化の状態を見ていました。修正では _value を先に設定し、Interlocked.MemoryBarrier() を追加してメモリ順序を強制しています。
// 修正前(危険な順序)
_header = Common.SingleMessageHeader; // HasValue becomes true
_value = messageValue; // Value set AFTER
// 修正後(安全な順序)
_value = messageValue; // Value set first
Interlocked.MemoryBarrier(); // Memory barrier for ordering
_header = Common.SingleMessageHeader; // HasValue becomes true
変更内容
- WriteOnceBlock.cs:
OfferMessageメソッドで_value割り当てを_headerより先に実行し、その間にInterlocked.MemoryBarrier()を挿入してCPU/コンパイラの命令並べ替えを防止 - WriteOnceBlockTests.cs: 並行 Post/ReceiveAsync の競合状態を再現する
TestConcurrentPostAndReceiveAsyncテスト追加(10,000反復、[OuterLoop]マーク付き)
パフォーマンスへの影響
メモリバリア命令の追加により、OfferMessage 実行時に若干のオーバーヘッドが増加します。ただし、この操作は WriteOnceBlock への最初の Post 時に1回だけ実行されるため、実用的なパフォーマンス低下は最小限です。むしろ不正な null 返却を回避することで全体的な信頼性が向上します。
関連Issue
#123432
その他
このバグは .NET 8.0 での報告です。修正はメモリモデルの制約(CPU再順序化やコンパイラ最適化による可視性問題)を適切に処理するための標準的な同期パターンを採用しています。LinkTo が _header.IsValid チェック時にロック保持していても、その外側での _value 読み込みが安全でなかった問題を根本的に解決しています。
#123411 Fix mixed mode debugging for PInvoke by adding PInvokeStubManager
- 作成者: @Copilot
- 作成日時: 2026年01月20日 23:03:21(UTC)
- マージ日時: 2026年02月12日 18:11:16(UTC)
- ラベル: area-Diagnostics-coreclr
概要
PR #117901の変更によりPInvoke ILStubがDynamicMethodDescからPInvokeMethodDescを直接返すようになったため、混合モードデバッガーのステップイン機能が破損していました。本PRは専用のPInvokeStubManagerを実装して、デバッガーがPInvokeスタブを正しく認識・トレースできるようにします。
// 新しいIsInteropStub()ヘルパーメソッド
bool IsInteropStub = pMD->IsInteropStub(); // IL stubs と PInvoke methods の両方に対応
変更内容
stubmgr.h/cpp: 新たに
PInvokeStubManagerクラスを実装CheckIsStub_Internal():IsPInvoke()でPInvokeスタブを認識DoTraceStub():GetPInvokeTarget()経由でネイティブターゲットをトレース- DAC対応の
DoEnumMemoryRegions()を実装
method.hpp/inl:
IsInteropStub()ヘルパーメソッドを追加IsILStub() || IsPInvoke()の判定を統一
appdomain.cpp: システムドメイン初期化時に
PInvokeStubManager::Init()を呼び出しvptr_list.h:
VPTR_CLASS(PInvokeStubManager)を追加してvtableサポートcontroller.cpp/frameinfo.cpp: デバッガーコードを
IsInteropStub()を使用するよう更新(4箇所)
パフォーマンスへの影響
影響なし。本変更は機能修正であり、スタブ認識ロジックの最適化によるわずかなメモリ削減以外、ランタイムパフォーマンスへの変更はありません。
関連Issue
#123410(Mixed mode debugging step-in not working through some PInvoke calls) #117901(PInvoke ILStub code変更)
その他
- JIT-compiled およびR2R(ReadyToRun)PInvokeスタブの両方に対応
PInvokeMethodDescからDynamicMethodDescへの逆マッピングを不要とする設計- デバッガーのスタブマネージャー基盤に適切に統合されており、コア機能として実装
#123133 Fix NullReferenceException in ConfigurationElement indexer when property is undefined
- 作成者: @Copilot
- 作成日時: 2026年01月13日 15:42:26(UTC)
- マージ日時: 2026年02月12日 15:16:37(UTC)
- ラベル: area-System.Configuration
概要
ConfigurationElement.this[string] インデクサーで存在しないプロパティにアクセスする際に NullReferenceException がスローされていた問題を修正しました。プロパティが見つからない場合に適切に null を返すよう、null チェックを追加しています。
// 修正前:null参照で例外発生
if (prop.ProvidedName != propertyName) return null;
// 修正後:null チェック追加
if (prop is null || prop.ProvidedName != propertyName) return null;
変更内容
- ConfigurationElement.cs:
this[string]インデクサーのゲッターにおいて、Properties[propertyName]とProperties[DefaultCollectionPropertyName]の両方がnullの場合に、prop.ProvidedNameにアクセスする前に null チェックを追加(1行変更) - ConfigurationElementTests.cs: 新しいテストメソッド
IndexerWithUndefinedPropertyReturnsNullを追加。定義されていないプロパティへのアクセスでnullが返されることを確認(.NET Core のみ対象)
パフォーマンスへの影響
影響なし。単純な null ガード追加のため、パフォーマンス上の変化はありません。
関連Issue
#123129
その他
- リスク評価:低(単一行の null チェック追加のみで、正常なプロパティ検索の動作は変わらない)
- 既存テスト655件すべてが合格
- 破壊的変更なし。本修正は .NET Core のみに適用(.NET Framework ではこの問題は発生しない)
#122638 Introduce local variables with unknown size
- 作成者: @snickolls-arm
- 作成日時: 2025年12月18日 11:23:37(UTC)
- マージ日時: 2026年02月12日 18:35:20(UTC)
- ラベル: area-CodeGen-coreclr community-contribution
概要
このPRは、コンパイル時にサイズが不明なローカル変数を扱うための ValueSize クラスを導入しています。値の番号付け(Value Numbering)やSSA構築などの最適化フェーズで、正確な数値サイズが不要な場合に、サイズの等価性などのプロパティのみを考慮する仕組みを追加しています。
// ValueSize を使用して、コンパイル時にサイズが未定の変数を扱う
var valueSize = lclVar.ValueSize; // 等価性チェックなど
変更内容
- gentree.h/cpp:
ValueSizeクラスの実装追加(116行追加)。サイズが既知か未知かを区別し、等価性判定をサポート - valuenum.h/cpp: 値の番号付けロジックで
ValueSizeを使用。既知サイズの場合のみ正確な値を要求 - lclvars.cpp:
LclVarDsc::lvValueSizeメソッドを追加。ローカル変数のサイズ情報をValueSizeで提供 - vartype.h: 型情報に関連する
ValueSizeの補助機能を追加 - ssabuilder.cpp: SSA構築時にサイズに基づく前提条件にアサーションを追加
- テスト追加: VectorT型のロード/ストア操作に関する値の番号付けテストを新規追加
パフォーマンスへの影響
影響なし。本変更は最適化フェーズの型安全性向上を目的としており、ランタイムパフォーマンスの直接的な改善や低下は想定されていません。ただし、より正確なサイズ情報の追跡により、今後の最適化精度向上につながる基盤を構築しています。
関連Issue
なし
その他
- 複数の詳細レビューを経た長期開発PR(レビュワーが40名以上)
- ARMアーキテクチャ向けの改善に分類(作成者: snickolls-arm)
- 既知サイズと未知サイズを区別することで、不正なサイズ前提に基づくコンパイル最適化エラーを防止
#122126 Async instantiating and unboxing thunks
- 作成者: @MichalStrehovsky
- 作成日時: 2025年12月02日 22:56:11(UTC)
- マージ日時: 2026年02月12日 06:14:53(UTC)
- ラベル: area-NativeAOT-coreclr runtime-async
概要
NativeAOTでの非同期インスタンス化・アンボックスシャンク対応を実現するPRです。新しいAsyncHelpers.TailAwaitイントリンシックを導入し、JITが非同期呼び出しを"tail await"として処理できるようにしました。これにより、シャンクメソッド自体の新しい中断点を作らず、呼び出し先の継続状態をそのまま返すことができます。
// TailAwait イントリンシック使用例
// async メソッドを呼び出す前に TailAwait() を呼び出し、
// JIT はその次の await を tail await として扱う
AsyncHelpers.TailAwait();
return asyncTarget();
変更内容
- テスト解除:
inst-unbox-thunksの非同期テストからNativeAOT用のActiveIssueアノテーションを削除 - JIT:
AsyncHelpers.TailAwaitイントリンシックの登録・認識・コード生成処理を実装 - コンパイラフラグ: シャンクメソッドが非同期ターゲットを呼び出す場合、
CORJIT_FLAG_ASYNCを設定(NativeAOTパス) - IL生成: NativeAOTの非同期DIM(Default Interface Member)ターゲットおよび特殊なアンボックスシャンク呼び出し前に
TailAwaitを生成 - ドキュメント: 非同期コード生成仕様ドキュメントを更新
パフォーマンスへの影響
改善点: Tail awaitにより、シャンクメソッドが余分な中断点を作らなくなります。非同期メソッドの継続状態が直接呼び出し元に返されるため、ステートマシン構築のオーバーヘッドが削減されます。
懸念点: パフォーマンスベンチマーク結果は提供されていません。ただしこれは正確性修正であり、パフォーマンス改善が期待されます。
関連Issue
- Fixes #121781
- Includes JIT change from #124175
その他
- JIT側の
async.cppでの変更(+198行)がこのPRの技術的核となっており、tail await変換ロジックとヘルパーのリファクタリングが含まれています - CoreCLR(従来のランタイム)とNativeAOT(静的AOT)の両方のパスに対応した実装となっています
- このPRによってNativeAOT環境での非同期シャンクのテスト実行が正式に可能になります