Pull Request on 2026年03月19日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。


目次

  1. #125790 [release/8.0] Remove Homebrew LLVM during macOS CI setup - Part 2
  2. #125789 [release/9.0] Remove Homebrew LLVM during macOS CI setup - Part 2
  3. #125785 [release/9.0] Remove Homebrew LLVM during macOS CI setup
  4. #125783 [release/8.0] Remove Homebrew LLVM during macOS CI setup
  5. #125771 Disable iOS and tvOS jobs until infra issue is fixed
  6. #125764 Add TSF_SuspensionTrapped flag to NativeAOT for accurate sample profiler reporting
  7. #125763 Remove Homebrew LLVM during macOS CI setup
  8. #125752 [Wasm RyuJit] Add JIT config JitWasmNyiToR2RUnsupported
  9. #125749 Stabilize ML-KEM APIs and remove Experimental attribute
  10. #125744 Increase FileSystemWatcher test event timeout to 1000ms
  11. #125706 Partially revert PR #125326: revert ComActivator/LicenseInteropProxy changes
  12. #125703 Split gc.cpp to multiple files based on the functionality - part 1
  13. #125701 [release/8.0] Update dependencies from dotnet/emsdk
  14. #125684 Filter out SPMI metric diffs smaller than ±0.001%
  15. #125682 Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test
  16. #125677 Fix Dataflow test timeouts under JIT stress: add timeouts to SpinWait.SpinUntil calls
  17. #125669 [Wasm RyuJIT] Insert r2r ind cell at the end of the args list instead of after 'this'
  18. #125617 Fix WebWorker hang when debugging Blazor WASM apps in Visual Studio
  19. #125603 [release/9.0-staging] Update dependencies from dotnet/xharness
  20. #125592 Delete WebHeaderEncoding.cs and replace usages with Encoding.Latin1
  21. #125564 [release/9.0] Fix intermediate artifact upload collisions for NativeAOT and Mono
  22. #125556 Add runtime async support for saving and reusing continuation instances
  23. #125421 Ensure the Thumb bit is set for resumption stub relocs
  24. #125385 Refactor System.Net.* AppContextSwitch usage to LocalAppContextSwitches
  25. #125289 Improve regex optimizer through investigation of regex optimizer passes
  26. #125260 Configure FileStreamOptions with PreallocationSize and async access in ZipArchiveEntry extract methods
  27. #125251 Remove redundant directory separator normalization in deps.json parsing
  28. #125196 Add analyzer+codefix for applying RequiresUnsafe to pointer methods
  29. #124782 [cDAC] Convert cDAC dump tests to run on Helix
  30. #124766 Add CRC32 validation when reading zip archive entries
  31. #124646 Support type-level JsonIgnoreCondition via [JsonIgnore] on classes, structs, and interfaces
  32. #123209 Support generic converters on generic types with JsonConverterAttribute

#125790 [release/8.0] Remove Homebrew LLVM during macOS CI setup - Part 2

  • 作成者: @steveisok
  • 作成日時: 2026年03月19日 17:32:59(UTC)
  • マージ日時: 2026年03月19日 20:31:11(UTC)
  • ラベル: area-Infrastructure

概要

macOS CI環境において、HomebrewでインストールされたLLVMライブラリ(例:/usr/local/lib内のx86_64のみのlibunwind.dylib)がApple SDKと競合し、ネイティブリンクを破損する問題を解決するため、CI設定からHomebrew LLVM (llvm@18) をアンインストールするスクリプト変更。ビルドはApple clang (/usr/bin/clang) のみを使用するため、Homebrew LLVMは不要。

変更内容

  • eng/install-native-dependencies.sh: Homebrew LLVM (llvm@18) のアンインストールステップを追加(Apple platformの依存関係セットアップ時)
  • 変更は1行追加、1行削除の最小限の修正

パフォーマンスへの影響

影響なし(CI環境のセットアップに関する変更で、ビルド自体のパフォーマンスへの直接的な影響はなし)

関連Issue

#125763(本PRはバックポートプロジェクト)

その他

  • リリース/8.0ブランチへのバックポート変更
  • macOS CI runner環境の安定性向上が目的(ネイティブリンク時の依存関係競合回避)

#125789 [release/9.0] Remove Homebrew LLVM during macOS CI setup - Part 2

  • 作成者: @steveisok
  • 作成日時: 2026年03月19日 17:31:32(UTC)
  • マージ日時: 2026年03月19日 20:36:59(UTC)
  • ラベル: area-Infrastructure

概要

macOS CI環境で、HomebrewからプリインストールされているLLVMがApple SDKのライブラリと競合し、ネイティブリンクを破壊する問題を解決するため、CI依存関係セットアップ時にHomebrewのLLVMを削除するようにしました。本PR(#125763)をrelease/9.0ブランチにバックポートするものです。

変更内容

  • eng/install-native-dependencies.sh: Homebrew llvm@18 をアンインストールするステップを追加
    • CI実行環境にプリインストールされているLLVMを削除
    • Apple clangが排他的に使用されるため、Homebrewの不要なLLVMライブラリ(例:/usr/local/lib配下の x86_64のみのlibunwind.dylib)による競合を回避

パフォーマンスへの影響

影響なし

関連Issue

#125763(オリジナルPR)

その他

なし


#125785 [release/9.0] Remove Homebrew LLVM during macOS CI setup

  • 作成者: @steveisok
  • 作成日時: 2026年03月19日 17:03:48(UTC)
  • マージ日時: 2026年03月19日 17:21:32(UTC)
  • ラベル: Servicing-approved area-Infrastructure-libraries

概要

macOS CI環境でHomebrewのLLVMがApple SDKと競合し、ネイティブリンクを破損する問題を解決するPR。CI実行環境に含まれるHomebrewのLLVM(特に/usr/local/liblibunwind.dylibなど)を事前に削除し、ビルドがApple clangのみを使用するようにします。本PR (#125763)の9.0リリースブランチへのバックポートです。

変更内容

  • eng/install-native-dependencies.sh: Homebrewのllvmパッケージをアンインストールするロジックを追加(+7行)。失敗モードと実施理由を説明するコメントを付加。

パフォーマンスへの影響

影響なし(CI環境のセットアップ最適化であり、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

#125763(オリジナルPR)

その他

  • macOS CI環境のネイティブ依存関係セットアップスクリプトの改善
  • リンカー競合による非決定的ビルド失敗を防止するための予防的対応

#125783 [release/8.0] Remove Homebrew LLVM during macOS CI setup

  • 作成者: @steveisok
  • 作成日時: 2026年03月19日 17:02:20(UTC)
  • マージ日時: 2026年03月19日 17:21:35(UTC)
  • ラベル: Servicing-approved area-Infrastructure-libraries

概要

macOS CI環境で事前インストールされているHomebrewのLLVMが、Apple SDKとの競合により、特にx86_64専用のlibunwind.dylibなどがネイティブリンクを破壊する問題を修正します。ビルドはApple clangの/usr/bin/clangを排他的に使用するため、Homebrew LLVMは不要です。

変更内容

  • eng/install-native-dependencies.sh: Appleプラットフォーム(macOS)の依存性セットアップ中にHomebrewのllvmをアンインストールする処理を追加(+7行)。これにより、ネイティブリンカが間違ったアーキテクチャまたは競合するdylibを誤って使用するのを防止します。

パフォーマンスへの影響

影響なし

関連Issue

#125763(本PRはこのバックポート)

その他

  • release/8.0ブランチへのバックポート
  • macOS CI環境の安定性向上を目的とした変更で、本体の機能やAPIには影響しません

#125771 Disable iOS and tvOS jobs until infra issue is fixed

  • 作成者: @kotlarmilos
  • 作成日時: 2026年03月19日 12:59:21(UTC)
  • マージ日時: 2026年03月19日 13:22:09(UTC)
  • ラベル: area-Infrastructure-mono

概要

XHarness/devicectl インフラの問題(#123796)が解決されるまで、iOS(ios_arm64)および tvOS(tvos_arm64)プラットフォームの CI ジョブを一時的に無効化します。

変更内容

  • eng/pipelines/runtime.yml: Mono/CoreCLR/NativeAOT の smoke ジョブにおける ios_arm64tvos_arm64 プラットフォームエントリをコメントアウト(3 ジョブ)
  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslike.yml: iOS/tvOS 関連のすべてのジョブ(Mono libs/runtime、NativeAOT libs/runtime、CoreCLR runtime/libs)における ios_arm64tvos_arm64 プラットフォームエントリをコメントアウト(6 ジョブ)
  • 無効化されたプラットフォームエントリの横に追跡用 Issue コメントを追加

パフォーマンスへの影響

影響なし(CI ジョブの無効化であり、ランタイムやコンパイラの動作に直接の変更なし)

関連Issue

#123796#125771

その他

本変更は一時的な対応であり、XHarness/devicectl インフラの問題解決後に iOS/tvOS ジョブの再有効化が予定されています。


#125764 Add TSF_SuspensionTrapped flag to NativeAOT for accurate sample profiler reporting

  • 作成者: @MichalStrehovsky
  • 作成日時: 2026年03月19日 05:40:03(UTC)
  • マージ日時: 2026年03月19日 12:52:58(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT ランタイムに TSF_SuspensionTrapped スレッド状態フラグを実装し、EventPipe SampleProfiler がサスペンション中に正確にサンプルを "Managed" または "External" として分類できるようにします。これにより CoreCLR の動作に揃えられます。

変更内容

  • thread.h: TSF_SuspensionTrapped フラグ値を追加、IsSuspensionTrapped() メソッドを宣言
  • thread.inl: IsSuspensionTrapped() のインライン実装を追加
  • thread.cpp: WaitForGC 内でサスペンション時に TSF_SuspensionTrapped フラグを設定・クリア
  • ep-rt-aot.cpp: IsSuspensionTrapped() を使用して SampleProfiler のサンプルタイプを Managed/External に分類
  • SampleProfilerSampleType.cs: NativeAOT での ActiveIssue スキップを削除し、検証テストを再有効化

パフォーマンスへの影響

影響なし。フラグの設定・クリアと確認は既存の WaitForGC 処理内で行われるため、パフォーマンスオーバーヘッドはありません。

関連Issue

#125217

その他

すべてのサスペンション パス(DisablePreemptiveMode、InlineSuspend、Redirect、hijack スタブ)は WaitForGC を経由するため、このフラグの設定により完全な対象範囲をカバーしています。これは内部ランタイム実装の変更であり、公開 API には影響しません。


#125763 Remove Homebrew LLVM during macOS CI setup

  • 作成者: @steveisok
  • 作成日時: 2026年03月19日 05:04:09(UTC)
  • マージ日時: 2026年03月19日 16:33:58(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

macOS 15 CI ランナーイメージに付属する Homebrew LLVM 18 が、x86_64 専用の libunwind.dylib などを /usr/local/lib にインストールし、ネイティブリンク時に間違ったアーキテクチャのライブラリを拾うことで、_unw_step__Unwind_Resume などのシンボルが未解決になり、macOS でのネイティブリンクが全て失敗する問題を修正します。ビルドは Apple clang(/usr/bin/clang)のみを使用するため、Homebrew LLVM を CI セットアップ時に削除します。

変更内容

  • eng/native/install-dependencies.sh: CI セットアップ中に brew uninstall で Homebrew LLVM を削除
  • src/native/libs/configure.cmake: Apple ターゲットで /usr/local/include の追加を回避し、Homebrew ヘッダ/ライブラリの競合を防止
  • src/coreclr/pal/src/CMakeLists.txt: Apple ターゲットで PAL ビルド時に /usr/local/include をスキップ
  • src/coreclr/debug/createdump/CMakeLists.txt: Apple ターゲットで createdump ビルド時に /usr/local/include をスキップ
  • eng/native/gen-buildsys.sh: CMake の下流呼び出しにコンパイラ変数をエクスポート
  • eng/native/build-commons.sh: osx ビルド時に CMAKE_OSX_SYSROOT=macosx を強制してヘッダ/ライブラリ解決を安定化
  • eng/common/native/init-compiler.sh: Darwin でデフォルト clang に対して /usr/bin/clang shim を優先し、LIBRARY_PATH をクリアして Homebrew の漏洩を回避

パフォーマンスへの影響

影響なし

関連Issue

#125757

その他

この変更は内部ビルド設定(CI/CMake 設定)の修正であり、公開 API への影響はありません。macOS でのネイティブビルドの信頼性向上に寄与する修正です。


#125752 [Wasm RyuJit] Add JIT config JitWasmNyiToR2RUnsupported

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年03月18日 22:52:38(UTC)
  • マージ日時: 2026年03月19日 16:11:48(UTC)
  • ラベル: area-CodeGen-coreclr

概要

WebAssembly JIT コンパイル時に未実装機能(NYI_WASM)に遭遇した場合、crossgen2 がコンパイルを継続できるようにするための JIT 設定値 JitWasmNyiToR2RUnsupported を追加します。この設定が有効な場合、NYI_WASM は通常の NYI 処理ではなく ReadyToRun の「unsupported」失敗にマップされます。

変更内容

  • src/coreclr/jit/jitconfigvalues.h: TARGET_WASM 配下に新しい JIT 設定値 JitWasmNyiToR2RUnsupported を追加
  • src/coreclr/jit/error.h: NYI_WASM マクロを更新し、設定が有効な場合に implReadyToRunUnsupported() を呼び出すよう変更
  • src/coreclr/jit/codegenwasm.cpp: 未実装オペコード処理において新設定を考慮したハンドリングを追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は Wasm ターゲット専用の内部実装(JIT コンパイラ)の改善です。公開 API への影響はありません。crossgen2(AOT コンパイル)で Wasm ビルドを処理する際の堅牢性向上を目的としています。


#125749 Stabilize ML-KEM APIs and remove Experimental attribute

  • 作成者: @vcsjones
  • 作成日時: 2026年03月18日 21:49:32(UTC)
  • マージ日時: 2026年03月19日 23:36:32(UTC)
  • ラベル: area-System.Security

概要

RFC 9935の公開に伴い、ML-KEM(ML Key Encapsulation Mechanism)のX.509/SPKI/PKCS#8関連APIから[Experimental]属性を削除し、APIを安定化します。公開鍵・秘密鍵のインポート/エクスポート機能およびX.509証明書アクセサーが実験的段階から正式な公開APIへ昇格します。

変更内容

  • MLKem.cs: [Experimental(SYSLIB5006)]属性を削除(30行削除、未使用のusingも削除)
  • X509Certificate2.cs: ML-KEM証明書キーアクセサーから[Experimental]属性を削除
  • PublicKey.cs: ML-KEM PublicKeyコンストラクタと公開鍵アクセサーから[Experimental]属性を削除
  • X509CertificateKeyAccessors.cs: Microsoft.Bcl.Cryptographyの拡張メソッドのML-KEM属性を削除
  • System.Security.Cryptography.cs(ref): 公開APIリファレンスサーフェスからSYSLIB5006属性を削除
  • MLKemPrivateKeyAsn.xml / MLKemPrivateKeyBothAsn.xml: ASN.1仕様リンクをドラフトからRFC 9935に更新
  • CompatibilitySuppressions.xml / ApiCompatBaseline.xml: 互換性情報を追加

パフォーマンスへの影響

影響なし

関連Issue

#125738

その他

  • この変更は破壊的変更ではありません。既存コードは継続して動作します。[Experimental]属性の削除により、これまで発行されていた警告(SYSLIB5006)が表示されなくなります。
  • ML-KEM APIはRFC 9935の公開により、十分に安定していると判断されたため正式な公開APIとなります。

#125744 Increase FileSystemWatcher test event timeout to 1000ms

  • 作成者: @lewing
  • 作成日時: 2026年03月18日 19:44:55(UTC)
  • マージ日時: 2026年03月19日 01:29:30(UTC)
  • ラベル: area-System.IO

概要

FileSystemWatcher テストの WaitForExpectedEventTimeout を 500ms から 1000ms に増加させるもの。inotify リファクタリング(#117148)後の stop/start タイミング変更により、ストレス環境(特に arm32 jitstress)でのイベント配信が遅延する問題に対処。500ms のタイムアウトは遅いハードウェアで false failure を引き起こしていたため、タイムアウト値を拡大することで タイミング起因のフラキーテストと機能的なバグの区別を容易にする。

変更内容

  • src/libraries/System.IO.FileSystem.Watcher/tests/Utility/FileSystemWatcherTest.cs: WaitForExpectedEventTimeout 定数を 500ms から 1000ms に変更
  • 影響範囲:このデフォルトタイムアウトを使用する 94 個のテストケース

パフォーマンスへの影響

テスト実行時間への影響。WaitForExpectedEventTimeout 定数は ExpectNoEventThread.Sleep など複数の箇所で使用されているため、成功時の各テスト実行に約 500ms の追加遅延が発生する可能性がある。

関連Issue

#125737#125740#103630#117148

その他

Copilot コードレビューでは、WaitForExpectedEventTimeout をイベント待機専用にスコープを限定し、ExpectNoEvent などの非イベント待機には別の定数を使用することで、テストスイート全体の速度低下を避ける方法が提案されている。


#125706 Partially revert PR #125326: revert ComActivator/LicenseInteropProxy changes

  • 作成者: @Copilot
  • 作成日時: 2026年03月18日 03:13:04(UTC)
  • マージ日時: 2026年03月19日 09:52:31(UTC)
  • ラベル: area-Interop-coreclr

概要

PR #125326で導入されたLicenseInteropProxy[UnmanagedCallersOnly]ベースの実装がGCストレス下でヒープ破損(終了コード -1073740940)を引き起こしていたため、部分的に元の実装に戻すパッチです。GC安全な管理呼び出しパターン(MethodDescCallSite + ARG_SLOT)を復元することで、ポインタベースのメタシグネチャの安全性問題を解決しています。

変更内容

  • ComActivator.cs: LicenseInteropProxyの安全でないUCOラッパーを削除し、管理されたCreate()ファクトリメソッドを復元
  • runtimecallablewrapper.cpp: ネイティブライセンスinterop呼び出しをUnmanagedCallersOnlyCallerからMethodDescCallSiteに変更
  • metasig.h: ポインタベースのLicenseInteropProxy UCOシグネチャエントリを削除
  • corelib.h: LicenseInteropProxyの元のメソッドバインディングシグネチャを復元

パフォーマンスへの影響

影響なし(安全性修正のため、パフォーマンスへの悪影響なし。元の実装に戻す性質のため、パフォーマンス改善も見込まれない)

関連Issue

#125598

その他

  • 破壊的変更: なし
  • 対象範囲: COM相互運用性のライセンス有効化機能に限定
  • 原因: 生ポインタ(object*Type*LicenseInteropProxy*)を使用した[UnmanagedCallersOnly]の実装がGCによるメモリ移動時にポインタの検証を行わないため、ヒープ破損が発生していました

#125703 Split gc.cpp to multiple files based on the functionality - part 1

  • 作成者: @janvorli
  • 作成日時: 2026年03月18日 00:54:12(UTC)
  • マージ日時: 2026年03月19日 17:14:43(UTC)
  • ラベル: NO-SQUASH area-GC-coreclr

概要

モノリシックなgc.cpp(約57,000行)を19の機能別ファイルに分割するコード再編成です。gc.cppは約8,300行に削減され、新しいファイルはgc.cppの末尾で#includeされることで、単一コンパイル単位のビルドモデルを維持しています。この変更は純粋な構造的な再編成であり、機能的・動作的な変更はありません。

変更内容

  • 新規ファイル作成(19ファイル、合計~48,000行追加)
    • allocation.cpp (4,337行): SOH/LOH/POH割り当てロジック
    • background.cpp (3,964行): バックグラウンドGC(並行マーク・スイープ)
    • plan_phase.cpp (8,309行): プラン フェーズ(プラグ/ギャップ処理)
    • mark_phase.cpp (4,204行): マーク フェーズ、マークスタック
    • card_table.cpp (2,006行): カード/ブリックテーブル管理
    • interface.cpp (2,738行): GCHeap公開API
    • dynamic_tuning.cpp (2,856行): GCチューニング ヒューリスティクス
    • regions_segments.cpp (2,387行): セグメント/リージョン ライフサイクル
    • diagnostics.cpp (1,787行): ヒープ検証、ETW診断
    • collect.cpp (1,724行): GC収集エントリポイント
    • init.cpp (1,554行): GC初期化ロジック
    • dynamic_heap_count.cpp (1,537行): サーバーGCヒープスケーリング
    • relocate_compact.cpp (2,261行): リロケート・コンパクト フェーズ
    • その他6ファイル: no_gc、memory、finalization、sweep、region_allocator、region_free_list
  • gc.cpp: 45,281行削減(約8,300行に縮小)、新ファイルを末尾で#include
  • .git-blame-ignore-revs: 機械的なトリム コミット追加(git blameの属性を保持)

パフォーマンスへの影響

影響なし。単一コンパイル単位モデルを維持しているため、コンパイル結果や実行時動作に変化なし。

関連Issue

なし

その他

  • ビルドシステム(CMakeLists.txt)への変更なし。gcwks.cpp・gcsvr.cpuは引き続き単一翻訳単位として全コードをコンパイル
  • すべての既存プリプロセッサガード(BACKGROUND_GC、USE_REGIONS、MULTIPLE_HEAPSなど)は維持
  • ヘッダファイルの変更なし
  • 次段階:各ファイルを独立してコンパイル可能に(単一TUの廃止)

#125701 [release/8.0] Update dependencies from dotnet/emsdk

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年03月18日 00:29:09(UTC)
  • マージ日時: 2026年03月19日 02:11:13(UTC)
  • ラベル: Servicing-approved area-codeflow

概要

dotnet/emsdkからの依存関係を更新するPull Request。WebAssembly(Emscripten)関連の構成要素のバージョンアップデートが含まれています。

変更内容

  • NuGet.config: NuGetフィード設定を1行更新
  • eng/Version.Details.xml: 以下の依存関係バージョンを更新
    • Microsoft.SourceBuild.Intermediate.emsdk: 8.0.26-servicing.26160.3 → 8.0.26-servicing.26167.4
    • Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100: 8.0.26 → 8.0.26(参照更新)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • 自動更新(dotnet-maestroによる)
  • 対象ブランチ:release/8.0
  • Emscripten SDKの更新により、WebAssembly関連のビルドワークロード機能に軽微な改善またはバグ修正が含まれる可能性があります

#125684 Filter out SPMI metric diffs smaller than ±0.001%

  • 作成者: @Copilot
  • 作成日時: 2026年03月17日 21:39:59(UTC)
  • マージ日時: 2026年03月19日 12:30:54(UTC)
  • ラベル: area-Infrastructure

概要

SuperPMI(Static Program Metrics Infrastructure)のメトリクス差分レポートにおいて、コード変更がない場合でも数値の微小な誤差がノイズとして報告される問題を解決します。superpmi.pywrite_metricdiff_markdown_summary関数に±0.01%の閾値チェックを追加し、このしきい値より小さいメトリクス差分は無視するようにしました。これは既存のis_significant_pctパターン(write_tpdiff_markdown_summaryで使用)との一貫性を保ちます。

変更内容

  • src/coreclr/scripts/superpmi.py: リスト内包表記の条件式にabs(compute_pct(...)) >= 0.01の閾値チェックを直接インライン化し、±0.01%未満のメトリクス差分をフィルタリング
  • src/coreclr/jit/compiler.cpp: パイプライン検証用にダミーコメントを追加

パフォーマンスへの影響

影響なし

関連Issue

#125683

その他

このPRはCopilot coding agentにより生成されました。ダミーコメント変更はSPMIパイプラインのトリガーと修正の検証を目的としており、実際の機能変更ではありません。


#125682 Fix flaky FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories test

  • 作成者: @Copilot
  • 作成日時: 2026年03月17日 21:30:42(UTC)
  • マージ日時: 2026年03月19日 14:33:05(UTC)
  • ラベル: area-System.IO

概要

FileSystemWatcher_SymbolicLink_TargetsDirectory_Create_IncludeSubdirectories テストのmacOS上での不安定性を修正しました。原因はmacOS FSEventsが遅延したCreatedイベントを配信する可能性があり、ExpectNoEventが無関係なパスのイベントにも反応していたためです。修正により、特定のネストされたパスのイベントのみを検証するようにExpectNoEventにパスフィルタを追加し、[ActiveIssue]属性をmacOSのみに限定しました。

変更内容

  • ExpectNoEventへのパスフィルタ追加: expectedPath: Path.Combine(linkPath, subDir, subDirLv2)を指定して、特定のネストされたパス配下でのCreatedイベントのみをチェック対象にしました。兄弟パスのイベントは無視されるようになりました。
  • [ActiveIssue]属性の限定: テストプラットフォームをTestPlatforms.OSXに制限し、Windows/Linuxではテストがスキップされずに実行されるようになりました。
  • テスト可読性の向上: ディスクレイアウト図とインラインパス注釈を追加して、各パス変数とexpectedPath引数を具体的な値でアノテーションしました。

パフォーマンスへの影響

影響なし

関連Issue

#124677#124847

その他

  • 互換性への影響: なし。テスト専用の変更です。
  • セキュリティ: セキュリティ関連の変更なし。

#125677 Fix Dataflow test timeouts under JIT stress: add timeouts to SpinWait.SpinUntil calls

  • 作成者: @Copilot
  • 作成日時: 2026年03月17日 20:22:40(UTC)
  • マージ日時: 2026年03月19日 22:22:28(UTC)
  • ラベル: area-System.Threading

概要

System.Threading.Tasks.Dataflow.Tests がJITストレステスト(jitstress2-jitstressregs)下でタイムアウトする問題を修正します。9個の SpinWait.SpinUntil() 呼び出しに対してタイムアウトを追加し、JIT再コンパイルによるCPUリソース枯渇フィードバックループを防止します。

変更内容

  • DataflowTestHelper.cs: 共有タイムアウト定数 SpinTimeoutMs = 30_000 を定義
  • ConcurrentTests.cs: 6箇所の SpinWait.SpinUntil() 呼び出しに30秒タイムアウトを追加し、Assert.True() でラップ
  • TransformBlockTests.cs: 1箇所の SpinWait.SpinUntil() 呼び出しにタイムアウトを追加
  • TransformManyBlockTests.cs/IAsyncEnumerable.cs: 各1箇所の SpinWait.SpinUntil() 呼び出しにタイムアウトを追加

変更前後の例:

// Before
SpinWait.SpinUntil(() => block.Count == messagesCount);

// After
Assert.True(SpinWait.SpinUntil(() => block.Count == messagesCount, DataflowTestHelpers.SpinTimeoutMs));

パフォーマンスへの影響

影響なし。本変更はテストの堅牢性向上が目的で、ランタイムパフォーマンスには影響しません。JITストレス環境下でのテスト信頼性が向上します。

関連Issue

#125671

その他

  • 変更はテストコードのみ(内部実装)で、公開APIへの影響なし
  • Dataflow機能自体に正確性バグはなく、テスト設計の仮定(「条件はすぐに満たされる」)がJITストレス下で破綻していたもの
  • SpinWait 自体は既に段階的バックオフ(spin → yield → Sleep(0)Sleep(1))を持つが、極度のストレス下では不足していた

#125669 [Wasm RyuJIT] Insert r2r ind cell at the end of the args list instead of after 'this'

  • 作成者: @kg
  • 作成日時: 2026年03月17日 18:56:11(UTC)
  • マージ日時: 2026年03月19日 02:48:43(UTC)
  • ラベル: arch-wasm area-CodeGen-coreclr

概要

WebAssembly RyuJIT対象のReadyToRun間接呼び出しにおいて、R2R間接セル引数の位置を修正しました。従来は(sp) (indcell) (arg0) (arg1) ...の順序でしたが、(sp) (arg0) (arg1) (indcell)の順序に変更し、WASM後端の期待するLIR評価順序とスタック順序に合わせました。

再帰的フィボナッチ計算が可能になり、ヒープをプライムすることで動作確認済みです。

// fib(31) が 1346269 を返すようになった
[MethodImpl(MethodImplOptions.NoInlining)]
public static int fib(int n) {
    return (n < 2) ? n : fib(n - 1) + fib(n - 2);
}

変更内容

  • src/coreclr/jit/morph.cpp: TARGET_WASM環境におけるWellKnownArg::R2RIndirectionCell引数の挿入方法を変更
    • WASM環境: PushBackで引数リストの末尾に追加(新挙動)
    • 非WASM環境: 従来通りInsertAfterThisOrFirstthisの後に挿入(既存挙動維持)
    • FEATURE_READYTORUN#endifコメント部分も明確化

パフォーマンスへの影響

影響なし(引数リスト構成の順序変更のみで、実行時性能に直接的な影響はなし)

関連Issue

#125669

その他

  • 修正後、indcellがi32.const 0に変換される理由については未解明とのこと
  • 現在のテストでは手動でヒープオフセット0にftn ptr値を書き込む必要がある点は将来の改善対象

#125617 Fix WebWorker hang when debugging Blazor WASM apps in Visual Studio

  • 作成者: @ilonatommy
  • 作成日時: 2026年03月16日 15:08:26(UTC)
  • マージ日時: 2026年03月19日 14:39:03(UTC)
  • ラベル: area-Debugger-mono

概要

Blazor WebAssemblyアプリでWeb Workersを使用する際、Visual Studioでのデバッグ中にワーカースレッドが起動時にハングする問題を修正しました。BrowserDebugProxy(MonoProxy)の2つの問題を解決します:

  1. Chrome がワーカーをアタッチ時に一時停止した後、Runtime.runIfWaitingForDebugger を送信していなかった
  2. ワーカーセッションの起動時に Debugger.paused イベントが IDE に転送され、ワーカーが再開されないままになっていた

変更内容

  • src/mono/browser/debugger/BrowserDebugProxy/MonoProxy.cs

    • Target.attachedToTarget ハンドラー:ワーカーターゲットに対して、ワーカー実行コンテキスト作成後に Runtime.runIfWaitingForDebugger を送信
    • OnDebuggerPaused メソッドのデフォルトケース:ワーカーセッション(context.ParentContext != null で検出)かつランタイムが未準備の場合、SendResume を呼び出して、一時停止イベントの IDE への転送を防止
  • eng/pipelines/performance/templates/perf-build-jobs.yml

    • パフォーマンス測定パイプラインの軽微な変更

パフォーマンスへの影響

影響なし

関連Issue

#125617 aspnetcore側の関連Issue:dotnet/aspnetcore#65823

その他

既知の制限事項:Web Worker内で実行されるC#コード(例:ワーカーライブラリの [JSExport] メソッド)のブレークポイントは機能しません。デバッグプロキシは現在メインページのWASMランタイムのみにSDBエージェントをアタッチし、ワーカーの第2ランタイムには対応していません。これは既存のアーキテクチャ上の制限で、本PRの対象外ですが、今後の解決が期待されています。


#125603 [release/9.0-staging] Update dependencies from dotnet/xharness

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年03月16日 05:03:11(UTC)
  • マージ日時: 2026年03月19日 22:56:13(UTC)
  • ラベル: Servicing-approved area-codeflow

概要

dotnet/xharness依存関係を更新するPull Requestです。Microsoft.DotNet.XHarness関連のNuGetパッケージを11.0.0-prerelease.26117.1から11.0.0-prerelease.26168.1にアップグレードしています。このアップデートはテスト実行基盤に関連する変更を含みます。

変更内容

  • eng/Version.Details.xml: xharness依存関係のバージョン情報を更新(6行変更)
  • eng/Versions.props: xharness関連パッケージのバージョン定義を更新(3行変更)
  • .config/dotnet-tools.json: ツール設定の微調整(1行変更)
  • NuGet.config: NuGet設定の1行削除

更新対象パッケージ:

  • Microsoft.DotNet.XHarness.CLI
  • Microsoft.DotNet.XHarness.TestRunners.Common
  • Microsoft.DotNet.XHarness.TestRunners.Xunit

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • Maestro自動依存関係更新サービスにより実施されたアップデートです(dotnet-maestro[bot])
  • release/9.0-stagingブランチへのマージです
  • xharness側のコミット607b3de9cf2dbfec6734e686e68d2813b40b2b51に対応しています

#125592 Delete WebHeaderEncoding.cs and replace usages with Encoding.Latin1

  • 作成者: @Copilot
  • 作成日時: 2026年03月15日 22:48:27(UTC)
  • マージ日時: 2026年03月19日 17:37:11(UTC)
  • ラベル: area-System.Net.Http reduce-unsafe

概要

WebHeaderEncoding.cs を削除し、すべての呼び出し元を Encoding.Latin1 に置き換えるリファクタリング。WebHeaderEncoding は Latin-1 バイト↔文字変換の最適化を提供していましたが、現在の Encoding.Latin1 は双方向で正しく機能するため、カスタム実装は不要になりました。

変更内容

  • 削除: src/libraries/Common/src/System/Net/WebHeaderEncoding.cs とその csproj 参照を完全削除
  • 置き換え (3ファイル):
    • HttpListener.Windows.cs: WebHeaderEncoding.GetString(bytes, 0, bytes.Length)Encoding.Latin1.GetString(bytes)
    • HttpListenerResponse.Windows.cs: GetByteCount + 配列作成 + GetBytes の組み合わせを Encoding.Latin1.GetBytes(str) の単一呼び出しに統合(5箇所)
    • HttpListenerResponse.Managed.cs: WebHeaderEncoding.GetBytes(str)Encoding.Latin1.GetBytes(str)
  • テスト更新: U+00FF を超える文字(例:U+1234)に対して、Encoding.Latin1 は置換文字 ? を生成(以前は下位バイトへの切り詰めにより無言でデータを破損)

パフォーマンスへの影響

影響なし(標準の Encoding.Latin1 実装への統一のため、パフォーマンス最適化ではなくコード簡潔化が目的)

関連Issue

なし

その他

  • AllowUnsafeBlocks はプロジェクトの他のファイルで必要なため csproj に残存
  • 破壊的変更なし(内部実装の簡潔化)
  • 既存の無効入力(U+00FF超の文字)については、以前の動作がデータ破損だったため、置換文字への変更は改善

#125564 [release/9.0] Fix intermediate artifact upload collisions for NativeAOT and Mono

  • 作成者: @lewing
  • 作成日時: 2026年03月14日 19:30:19(UTC)
  • マージ日時: 2026年03月19日 20:41:06(UTC)
  • ラベル: Servicing-approved area-Infrastructure

概要

release/9.0dotnet-runtime-officialパイプラインで、NativeAOTとMonoが複数プラットフォームから同じアーティファクトパスにアーキテクチャ非依存パッケージ(Microsoft.NETCore.App.Ref.9.0.15.nupkgなど)をアップロードする際の競合による間欠的なアップロード失敗を修正します。根本原因は複数ジョブが同時に同じファイルをBlob storageに書き込もうとすることです。各プラットフォームのアップロード名を一意にすることで解決します。

変更内容

  • NativeAOTアーティファクト名NativeAOTRuntimePacksNativeAOTRuntimePacks_$(osGroup)$(osSubgroup)_$(archType) に変更
  • Monoアーティファクト名MonoRuntimePacks → プラットフォーム/構成ごとに一意化
    • 標準Mono:MonoRuntimePacks_$(osGroup)$(osSubgroup)_$(archType)
    • マルチスレッド:MonoRuntimePacks_multithread_$(osGroup)$(osSubgroup)_$(archType)
    • CrossAOT:MonoRuntimePacks_crossaot_$(osGroup)$(osSubgroup)_$(archType)
    • LLVM AOT:MonoRuntimePacks_llvmaot_$(osGroup)$(osSubgroup)_$(archType)
  • WorkloadsジョブのダウンロードパターンIntermediateArtifacts/MonoRuntimePacks/Shipping/...IntermediateArtifacts/MonoRuntimePacks*/Shipping/... にワイルドカード対応

パフォーマンスへの影響

影響なし

関連Issue

#125561 参照:dotnet/dnceng#1916

その他

  • 本修正はrelease/9.0のみに適用。main/release/10.0はVMRビルドに移行済み
  • CoreCLRはこのパターン(プラットフォームごとのユニークな名前)を既に使用しており、アップロード競合は発生していない
  • Perfパイプライン(perf-non-wasm-jobs.yml)も同じパターンを使用していますが、単一プラットフォームアップロードのみのため競合リスクはなく変更不要

#125556 Add runtime async support for saving and reusing continuation instances

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月14日 13:44:18(UTC)
  • マージ日時: 2026年03月19日 11:08:24(UTC)
  • ラベル: area-CodeGen-coreclr runtime-async

概要

ランタイム非同期メソッドの最適化として、全ての停止点に対応した単一の共有継続レイアウトを生成し、複数の中断時に同じ継続インスタンスを再利用できるようにしました。これにより割り当て回数を削減し、GC圧力を軽減します。ベンチマークでは約30%のパフォーマンス改善が確認されています。

// 中断が多いループでのパフォーマンス向上
// 修正前: ~539ms
// 修正後: ~404ms (約25%削減)
for (int i = 0; i < n; i++)
{
    await na;  // 複数の中断点で同じ継続インスタンスを再利用
}

変更内容

JIT (async.h/async.cpp)

  • 全ての停止点に対応する共有継続レイアウトの生成機能を追加
  • 継続インスタンスの再利用制御フローを実装
  • 結果/例外/継続コンテキストストレージのオフセットをフラグにエンコード

ABI/契約 (corinfo.h)

  • CorInfoContinuationFlags を、「Has*」プレゼンスビットからスロットインデックスビットフィールドエンコーディングに変更
  • 継続の例外/コンテキスト/結果ストレージ位置をインデックスで指定可能に

ランタイム (object.h/interpexec.cpp)

  • 継続オブジェクトのヘルパーをインデックスベースのデコーディングに更新
  • インタープリタの中断/再開時にエンコードされたインデックスから実ストレージオフセットを計算

BCL (AsyncHelpers.CoreCLR.cs)

  • 管理コードの継続フラグデコーディングを新しいインデックスエンコード形式に対応
  • 例外/コンテキスト/結果ストレージへのアクセス方法を更新

設定

  • JitAsyncReuseContinuations 設定スイッチを追加(デフォルト有効)

パフォーマンスへの影響

改善: 約30%のパフォーマンス向上(中断が多いシナリオで確認)

  • 継続インスタンスの割り当て数が大幅に削減
  • GCプレッシャーが低減

トレードオフ: コード生成サイズの増加(38バイト増)

  • 作成者は「alloc新継続パス」の共有などで今後削減予定

関連Issue

#125497(このPRの基盤となるIssue)

その他

  • 破壊的変更: なし。内部実装の変更で公開APIには影響なし
  • 注意点: 継続フラグ形式の変更は内部的なもので、ランタイムとJITの両方で一貫性が必須
  • インタープリタも新しいフラグエンコーディング方式に対応済み

#125421 Ensure the Thumb bit is set for resumption stub relocs

  • 作成者: @jtschuster
  • 作成日時: 2026年03月10日 23:51:14(UTC)
  • マージ日時: 2026年03月19日 17:20:52(UTC)
  • ラベル: arch-arm32 area-crossgen2-coreclr

概要

ARM32 Thumb-2コード生成の要件に対応し、ReadyToRun/crossgen2でARM32上の非同期メソッドを安全に出力できるようにしました。ARM32ではThumb-2命令セットのため、コードポインタのビット0(Thumbビット)を設定する必要があります。これまでこのビットが未設定のため、CI上で不正命令エラーが発生し、ARM32での非同期メソッド出力が無効化されていました。

変更内容

  • src/coreclr/jit/emit.cpp: CORINFO_AsyncResumeInfoリロケーション時にARM32用の追加デルタを適用し、リロケートされたコードポインタにThumbビットが設定されるよう修正(+33/-2)
  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRunCodegenNodeFactory.cs: ARM32での非同期メソッド除外フィルターを削除(複合ビルド時の除外は継続)(+0/-10)
  • src/coreclr/tools/aot/ILCompiler.ReadyToRun/JitInterface/CorInfoImpl.ReadyToRun.cs: リロケーション情報記録時の処理更新(+1/-0)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRにより、ARM32環境でのReadyToRun出力時に非同期メソッドが再度有効化されます。ただし、複合ビルド(composite builds)時のARM32除外は継続して適用されます。これはランタイム内部実装(JIT/AOTコンパイラの変更)であり、公開APIへの影響はありません。


#125385 Refactor System.Net.* AppContextSwitch usage to LocalAppContextSwitches

  • 作成者: @rzikm
  • 作成日時: 2026年03月10日 13:43:53(UTC)
  • マージ日時: 2026年03月19日 12:34:13(UTC)
  • ラベル: area-System.Net

概要

System.Net.* アセンブリ全体のAppContextスイッチ処理を標準化するためのリファクタリング。従来のAppContextSwitchHelperや手動のAppContext.TryGetSwitchパターンを統一されたLocalAppContextSwitches部分クラスパターンに置き換えることで、コード保守性を向上させます。HTTPのランタイム設定パーサーは対象外。

変更内容

  • 削除: AppContextSwitchHelper.cs を削除し、LocalAppContextSwitchesパターンに統一
  • 拡張: LocalAppContextSwitches.Common.cs に環境変数フォールバック機能を追加
  • 新規ファイル: 各アセンブリで特定のスイッチを定義する部分クラス:
    • System.Net.Security/LocalAppContextSwitches.cs: DisableTlsResume、EnableServerAiaDownloads、EnableOcspStapling、UseManagedNtlm、UseNetworkFramework
    • System.Net.Quic/LocalAppContextSwitches.cs: DisableConfigurationCache、AppLocalMsQuic
    • System.Net.Http/LocalAppContextSwitches.cs: UsePortInSpn
    • System.Net.HttpListener/LocalAppContextSwitches.cs: EnableKernelResponseBuffering
    • System.Net/LocalAppContextSwitches.Net.cs: DisableIPv6、EnableSslKeyLogging
  • リファクタリング: SslStream、SslStreamPal、NegotiateAuthenticationPal、AuthenticationHelper等のインラインスイッチ実装をLocalAppContextSwitchesに統合
  • プロジェクト更新: .csprojファイルの参照を新しい共通ファイルに更新し、不要な参照を削除

パフォーマンスへの影響

影響なし(コード構造の最適化であり、ランタイム動作の変更はない)

関連Issue

なし

その他

Copilotのコード審査により、LocalAppContextSwitches.Common.csの63行目でoutパラメータがfalseリターンパスで未割り当てであることが指摘されました。コンパイルエラーを防ぐために、返却前にvalue = false;を追加する必要があります。


#125289 Improve regex optimizer through investigation of regex optimizer passes

  • 作成者: @danmoseley
  • 作成日時: 2026年03月07日 08:30:23(UTC)
  • マージ日時: 2026年03月19日 15:12:42(UTC)
  • ラベル: area-System.Text.RegularExpressions

概要

正規表現オプティマイザーの最終処理段階にFinalReduce()メソッドを追加し、グローバルパス(FindAndMakeLoopsAtomicEliminateEndingBacktracking)による新規ノード構造を再度削減することで、221パターン(実世界の18,931パターン中1.2%)の追加最適化を実現します。すべてのパターンが最大2ラウンドで収束し、リグレッションはゼロです。

変更内容

  • RegexNode.cs: FinalReduce()プライベートメソッド(15行)を追加。ツリーをボトムアップで走査し、各ノードでReduce()を再実行し、簡略化されたノードを置き換え。StackHelper.TryEnsureSufficientExecutionStack()ガード付き。UpdateBumpalongFinalReduce後に移動(ツリー再構造化により交互系を連結に変換したものを検出するため)。
  • RegexReductionTests.cs: 実世界コーパスで特定された7つの異なる改善パターンをカバーする新規テスト22行を追加。すべてのテストはFinalReduce変更なしで失敗、あり(の)で成功を確認。

パフォーマンスへの影響

  • 解析時コスト: 総解析時間の0.3%、18,931パターンで測定、測定誤差内(無視できるレベル)
  • ツリー改善: 18,710パターンは同一、221パターンは明らかに簡潔化、リグレッションゼロ
  • 収束性: すべてのパターンが最大1追加ラウンドで安定、高価な反復リスクなし
  • 既存マイクロベンチマーク: dotnet/performanceの38パターンに変更なし(十分複雑でないため)

関連Issue

#66031

その他

改善メカニズムの例(7つの代表的なパターン):

  1. 空要素削除(a(?:)a
  2. 交互系での空要素崩壊((?>\n(?:)\|\r\n)(?>\n\|\r\n)
  3. プリフィックス抽出とループ変換の連鎖効果
  4. 非バックトラッキング子への冗長Atomic削除(a(?>b?)ab?
  5. 単一文字集合の簡潔化([b]b

検証方法: 実世界ルジェネット(dotnet/runtime-assetsコーパス)からの18,931パターンでエクスペリメント実施。再度のReduce()実行のみで100%の改善を達成し、他グローバルパスの再実行は追加改善なし。既存424テスト(PatternsReduceIdentically)すべて合格。


#125260 Configure FileStreamOptions with PreallocationSize and async access in ZipArchiveEntry extract methods

  • 作成者: @rzikm
  • 作成日時: 2026年03月06日 08:44:30(UTC)
  • マージ日時: 2026年03月19日 12:24:29(UTC)
  • ラベル: area-System.IO.Compression

概要

ZipArchiveEntryの抽出メソッドにおいて、FileStreamOptionsを最適化することで抽出パフォーマンスを向上させます。具体的には、エントリの非圧縮サイズ(ZipArchiveEntry.Length)に基づいてPreallocationSizeを設定してディスク領域を事前割り当てし、フラグメンテーション低減と書き込み性能向上を実現します。また、非同期抽出メソッド(ExtractToFileAsync)ではFileOptions.Asynchronousを有効化して非同期I/Oを使用させます。

変更内容

  • src/libraries/System.IO.Compression.ZipFile/src/System/IO/Compression/ZipFileExtensions.ZipArchiveEntry.Extract.cs

    • 共有ファイル作成オプション処理にPreallocationSizeの設定を追加
    • ZipArchiveEntry.LengthからFileStreamOptions.PreallocationSizeを設定するロジック実装
  • src/libraries/System.IO.Compression.ZipFile/src/System/IO/Compression/ZipFileExtensions.ZipArchiveEntry.Extract.Async.cs

    • 非同期フラグを共有初期化ヘルパーに渡し、非同期メソッド利用時にFileOptions.Asynchronousを設定

パフォーマンスへの影響

ディスク領域の事前割り当てによりファイルシステムのフラグメンテーション削減、ファイル書き込み性能向上が期待されます。非同期抽出メソッドが適切な非同期I/Oを使用することでスレッドプール効率が向上します。

関連Issue

#125260

その他

公開API (ZipArchiveEntry.ExtractToFileExtractToFileAsync) の動作改善で、破壊的変更なし。ライブラリ内部実装(System.IO.Compression.ZipFile)の最適化です。


#125251 Remove redundant directory separator normalization in deps.json parsing

  • 作成者: @elinor-fung
  • 作成日時: 2026年03月05日 23:53:24(UTC)
  • マージ日時: 2026年03月19日 17:23:53(UTC)
  • ラベル: area-Host

概要

deps.json解析時のディレクトリセパレータ正規化を最適化。パス正規化をdeps_asset_tコンストラクタで一度だけプラットフォームセパレータ(DIR_SEPARATOR)に統一し、従来の毎回のアクセス時正規化を削除。これによりスタートアップ時のメモリ割り当てを400以上削減します。

変更内容

  • deps_entry.h: deps_asset_tコンストラクタがrelative_pathlocal_pathをコンストラクト時にプラットフォームセパレータに正規化(従来は'/'で保存後に毎回変換)
  • deps_entry.cpp: normalize_dir_separator()ヘルパー関数を削除、to_dir_pathをリファクタリング、すでに正規化されたパスを直接使用
  • deps_resolver.cpp: get_deps_filename()関数を削除、プレースホルダ検出ロジックを"/_._"からDIR_SEPARATOR_STR "_._"に更新

パフォーマンスへの影響

改善: スタートアップ時のメモリ割り当てが400以上削減されます。パス正規化の繰り返し処理がコンストラクタの一度の処理に集約されため、実行時オーバーヘッドも軽減。

関連Issue

なし

その他

なし


#125196 Add analyzer+codefix for applying RequiresUnsafe to pointer methods

  • 作成者: @Copilot
  • 作成日時: 2026年03月04日 23:42:54(UTC)
  • マージ日時: 2026年03月19日 17:40:36(UTC)
  • ラベル: area-Infrastructure-libraries linkable-framework

概要

Roslyn アナライザー UnsafeMethodMissingRequiresUnsafeAnalyzer と対応するコードフィックスプロバイダーを追加し、unsafe 修飾子を持つメソッドで [RequiresUnsafe] 属性が欠落している場合に警告(IL2900)を発する機能です。System.Private.CoreLib 全体の 276 ファイルにわたって [RequiresUnsafe] を適用しました。

変更内容

  • 新規アナライザー: UnsafeMethodMissingRequiresUnsafeAnalyzerunsafe メソッドに [RequiresUnsafe] が不足している場合に IL2900 診断を報告
  • コードフィックス: UnsafeMethodMissingRequiresUnsafeCodeFixProvider — 自動的に [RequiresUnsafe] 属性を追加
  • CoreLib への属性適用: 276 ファイルの unsafe メソッドに [RequiresUnsafe] を追加
  • マージコンフリクト解決:
    • MdImport.cs: LibraryImport/partial シグネチャを維持し [RequiresUnsafe] を追加
    • Sve.PlatformNotSupported.cs: SVE メソッドシグネチャ変更に対応し、新規 unsafe ポインタメソッドに [RequiresUnsafe] を確保
  • コーナーケース除外:
    • IntPtr.csUIntPtr.cs から [RequiresUnsafe] を削除(ポインタそのものは unsafe ではない)
    • Unsafe.csAdd<T>(void*, int)Subtract<T>(void*, int) から削除(ポインタ参照解除がない)
    • NativeMemory.csNativeMemory.Unix.csAllocAllocZeroed から削除(ポインタ返却は本質的に unsafe ではなく、参照解除時に unsafe)
  • クリーンアップ: 不要な using System.Diagnostics.CodeAnalysis; を含む 43 ファイルを revert、UTF-8 BOM が削除された 20 ファイルを復元

パフォーマンスへの影響

影響なし

関連Issue

#125195

その他

  • 本 PR は pointer ベースのメソッドに限定されており、non-pointer RequiresUnsafe 変更(Unsafe.csref T 返却メソッド等)は別途 PR にて実施予定
  • 公開 API: [RequiresUnsafe] は既存属性で、新規メソッドへの追加は既存コードの互換性に影響なし(静的解析結果の変化)

#124782 [cDAC] Convert cDAC dump tests to run on Helix

  • 作成者: @max-charlamb
  • 作成日時: 2026年02月24日 03:42:34(UTC)
  • マージ日時: 2026年03月19日 15:32:02(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC dump テストを ADO パイプラインステージから Helix インフラストラクチャへの実行に転換します。従来の DumpCreation + DumpTest の 2 段階ステージを、単一の CdacDumpTests ステージに統合し、ダンプ生成とテスト実行を Helix マシン上で実行するようにします。windows_arm64 プラットフォームのサポートも追加されます。

変更内容

  • DumpTests.targets: BuildDebuggeesOnly ターゲットを追加し、ローカルでダンプを生成せずにデバッグ対象のアプリケーションをビルドする機能を実装
  • Microsoft.Diagnostics.DataContractReader.DumpTests.csproj: PrepareHelixPayload ターゲットを追加してテストアーティファクトをステージング、XUnitConsoleRunner パッケージを参照
  • cdac-dump-helix.proj / cdac-dump-xplat-test-helix.proj: Helix SDK プロジェクトファイルを新規作成し、ダンプ生成とテスト実行をオーケストレーション。OS ごとのコマンド、キュー、ワークアイテムを定義
  • runtime-diagnostics.yml: 2 段階の ADO ワークフローを Helix ベースの単一ステージに置き換え。Debuggees 用の csproj ファイルに ProductName プロパティを追加
  • prepare-cdac-helix-steps.yml: 新規作成の Helix ペイロード準備用ステップ定義

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

Copilot レビューコメント: shouldContinueOnError: true がマトリックス/ジョブレベルで設定されている場合、Helix 送信ステップに continueOnError: true が転送されるため、ダンプテスト失敗時に SucceededWithIssues ステータスのままジョブが完了する可能性があります。テスト失敗をマスクしないよう、shouldContinueOnError を false に保つか、Agent.JobStatusSucceededWithIssues の場合にジョブを失敗させる明示的な最終ステップの追加を検討すべきとの指摘がされています。


#124766 Add CRC32 validation when reading zip archive entries

  • 作成者: @alinpahontu2912
  • 作成日時: 2026年02月23日 20:48:51(UTC)
  • マージ日時: 2026年03月19日 10:45:56(UTC)
  • ラベル: area-System.IO.Compression breaking-change

概要

ZIP アーカイブエントリ読み込み時の CRC32 チェックサム検証機能を追加しました。新しい CrcValidatingReadStream クラスがデータ読み込み中にランニング CRC32 を計算し、期待されたバイト数を読み込み終了時に ZIP エントリヘッダーの CRC 値と比較して検証します。データ破損(改ざんされた非圧縮サイズなど)を検出すると InvalidDataException をスローします。

変更内容

  • ZipCustomStreams.cs: 新規 CrcValidatingReadStream クラスを追加。デコンプレスされたエントリストリームをラップし、読み込みながら CRC32 を検証。シーク処理は基盤ストリームに委譲しますが CRC 追跡は中止(逐次読み込み要件)。Flush は NotSupportedException をスロー。
  • ZipArchiveEntry.cs: OpenInReadMode および OpenInReadModeGetDataCompressor メソッドを更新し、返却ストリームを CrcValidatingReadStream でラップ。
  • Strings.resx: CRC 検証失敗時のエラーメッセージ CrcMismatch リソース文字列を追加。
  • zip_InvalidParametersAndStrangeFiles.cs: 改ざんされたエントリの読み込みテストを更新。従来は改ざんデータを黙認していましたが、CRC 検証で InvalidDataException が発生することを期待するように修正。

パフォーマンスへの影響

読み込みストリーム各バイトに対して CRC32 計算が実行されるため、わずかなオーバーヘッドが発生します。具体的なベンチマーク結果は提供されていません。

関連Issue

#124766

その他

  • 破壊的変更:なし(既存の公開 API 署名に変更なし)
  • 互換性:従来は改ざんされた ZIP エントリが検出されず読み込めていましたが、今後は CRC 不一致時に例外が発生するため、不正なファイルの取り扱い動作が変わります
  • セキュリティ側面:ZIP ファイルの整合性検証強化により、改ざん検出が可能になります

#124646 Support type-level JsonIgnoreCondition via [JsonIgnore] on classes, structs, and interfaces

  • 作成者: @Copilot
  • 作成日時: 2026年02月20日 14:41:40(UTC)
  • マージ日時: 2026年03月19日 12:49:34(UTC)
  • ラベル: area-System.Text.Json

概要

[JsonIgnore(Condition = ...)]属性がクラス、構造体、インターフェースの型レベルで使用可能になりました。型レベルで設定したJsonIgnoreConditionは、すべてのプロパティとフィールドのデフォルト値として機能し、プロパティごとの重複指定を削減できます。プロパティレベルの属性は型レベルの設定をオーバーライドでき、型レベルの指定はグローバルなJsonSerializerOptions.DefaultIgnoreConditionよりも優先されます。

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
class MyPoco
{
    public string? PropA { get; set; }
    public string? PropB { get; set; }
    public string? PropC { get; set; }
}

変更内容

  • API展開: JsonIgnoreAttributeAttributeUsageClass | Struct | Interface | Property | Fieldに拡大し、互換性抑制を追加
  • リフレクションリゾルバー: DefaultJsonTypeInfoResolver.Helpers.csで型レベルの[JsonIgnore]を解決し、JsonIgnoreCondition?をパラメータとしてAddMemberCreatePropertyInfoに渡す。JsonIgnoreCondition.AlwaysInvalidOperationExceptionを発生。非nullable値型でWhenWritingNullの場合はNeverに設定
  • ソースジェネレータ: JsonSourceGenerator.Parser.csで型レベル属性をサポート。JsonIgnoreCondition.Alwaysに対してSYSLIB1226警告を発行
  • 新しい診断: SYSLIB1226診断記述子、リソース文字列(多言語対応)、ドキュメント更新を追加
  • テスト: リフレクションおよびソースジェネレータパスで、WhenWritingNullWhenWritingDefaultAlways(無効構成)、プロパティレベルオーバーライド、構造体、継承、グローバル設定のオーバーライドなどを網羅

パフォーマンスへの影響

影響なし

関連Issue

#108231

その他

  • JsonIgnoreCondition.Alwaysを型レベルで指定することは無効な設定として拒否されます(リフレクションパスでInvalidOperationException、ソースジェネレータでSYSLIB1226警告を発行)
  • 非nullable値型でWhenWritingNullが指定された場合、グローバルDefaultIgnoreConditionの影響を防ぐためNeverに自動変換されます
  • APIの互換性承認抑制がApiCompatBaseline.NetCoreAppLatestStable.xmlおよびCompatibilitySuppressions.xml(net10.0、net462、netstandard2.0)に追加されています

#123209 Support generic converters on generic types with JsonConverterAttribute

  • 作成者: @Copilot
  • 作成日時: 2026年01月15日 09:52:54(UTC)
  • マージ日時: 2026年03月19日 15:35:35(UTC)
  • ラベル: area-System.Text.Json

概要

JsonConverterAttribute がオープンジェネリック型のコンバーターを、型パラメーター数が一致するジェネリック型に対して使用できるようになりました。リフレクションベースのプロバイダーおよびソースジェネレーターの両方で動作します。従来は Type.ContainsGenericParameters is true エラーが発生していた以下のコードが正常に動作するようになります:

[JsonConverter(typeof(OptionConverter<>))]
public readonly struct Option<T>
{
    public bool HasValue { get; }
    public T Value { get; }
    public Option(T value) { HasValue = true; Value = value; }
}

public sealed class OptionConverter<T> : JsonConverter<Option<T>>
{
    // ... 実装
}

// これまではエラー、今は動作
JsonSerializer.Serialize(new Option<int>(42));

変更内容

  • DefaultJsonTypeInfoResolver.Converters.cs: コンバーター型がオープンジェネリックで型パラメーター数が一致する場合、MakeGenericType() で閉じたジェネリック型を自動構築。互換性のないオープンジェネリックコンバーター(非ジェネリック型や異なるアリティ)には InvalidOperationException を明示的にスロー

  • ThrowHelper.Serialization.cs: ThrowInvalidOperationException_IncompatibleOpenGenericConverterType ヘルパーメソッドを追加

  • Strings.resx: エラーメッセージリソース IncompatibleOpenGenericConverterType を追加

  • JsonSourceGenerator.Parser.cs: ネストされたジェネリック型を含むすべてのジェネリック型パラメーター数をカウントする GetTotalTypeParameterCount() と、ネストされたジェネリックコンバーター(例:Container<>.NestedConverter<>)の閉じた型を構築する ConstructNestedGenericType() を追加

  • テスト: リフレクション・ソースジェネレーター統合・単体テストで包括的なカバレッジを追加。単一型パラメーター、複数型パラメーター、ネストされたジェネリックコンバーター、制約付きジェネリックコンバーター、アリティ不一致などのエラーシナリオに対応

パフォーマンスへの影響

影響なし

関連Issue

#123208

その他

  • ソースジェネレーターはネストされたジェネリック型階層を手動で走査する必要があります。Roslyn の INamedTypeSymbol.TypeParameters は直接の型パラメーターのみを公開するため、リフレクションの Type.GetGenericArguments() とは異なり、階層全体のパラメーターを返しません
  • 互換性のない型(非ジェネリック型、アリティ不一致、制約違反など)に対しては明示的なエラーハンドリングが実装されています

目次