Pull Request on 2026年08月11日

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

注意点

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


目次

  1. #132100 JIT: fold wasm local address frame offsets into store memargs
  2. #132097 Remove and clarify PEAssembly constructor parameters
  3. #132091 Fix contract violation in CodeVersionManager::EnumerateClosedMethodDescs
  4. #132086 Add regression test for tuple swap with implicit indexer references
  5. #132084 Limit Helix job monitor to runtime pipeline
  6. #132083 Signal GC suspension pending during NativeAOT thread suspension
  7. #132077 Ensure FileStream.CanSeek works for PIPE_ACCESS_OUTBOUND pipes
  8. #132065 Disable DnsResolverTest.ResolveAddresses_NonExistent_ReturnsNxDomain on Windows Server 2025
  9. #132029 [crossgen2][wasm] Shrink Code Section Relocs
  10. #132023 System.IO: Make text and sequence streams non-seekable
  11. #132018 Fix NativeAOT aggregate executable dSYM publish paths
  12. #132010 Don't validate/materialize HTTP headers when logging them
  13. #131991 Deduplicate minipal thread ID TLS cache.
  14. #131968 Remove unused OpenSSL Interop
  15. #131941 [automated] Merge branch 'release/8.0' => 'release/8.0-staging'
  16. #131939 [automated] Merge branch 'release/9.0' => 'release/9.0-staging'
  17. #131919 Enable Moq HostTests on ios
  18. #131828 Don't attach code-fix locations from outside the analyzed compilation
  19. #131821 [CrashReporter] Enable InProc CrashReporter for crashing GC threads
  20. #131764 Avoid redundant Java GC bridge graph computation
  21. #131475 [release/10.0] [mono] Fix interface call in case of reabstraction
  22. #131434 [release/10.0] Fix native EH in external shared libs on macOS
  23. #130688 Avoid rooting cryptography through ZipArchive on browser

#132100 JIT: fold wasm local address frame offsets into store memargs

概要

WebAssembly対象のJITコンパイラにおいて、ローカル変数へのストア操作でフレームオフセットをメモリアドレスに統合する最適化を実装しました。レジスタ割り当て不可のローカル変数へのストアをSTOREIND命令に書き直す際に、オフセットをメモリアドレスに組み込むことで、フレームポインタのみをコード化し、ストア命令がオフセットを追加するようにしています。

この最適化により、SPC R2Rコード領域が15,820,359バイトから14,953,402バイトに削減されています(-5.48%)。

変更内容

  • codegen.h: コード生成ヘッダーに型定義追加(+2/-1)
  • codegenwasm.cpp: WebAssemblyコード生成で、フレームオフセット統合時のメモリアドレス処理を改善(+40/-11)
  • lir.h: 低レベルIRに新フラグを追加してオフセット統合可能性をマーク(+5/-1)
  • lower.h: ローイング処理のプロトタイプ追加(+1/-0)
  • lowerwasm.cpp: WebAssembly固有のローイング処理でSTOREIND命令時にオフセット統合フラグを設定(+36)
  • regallocwasm.cpp: レジスタ割り当て処理の不要コード削除(-3)

パフォーマンスへの影響

  • コードサイズ削減: SPC R2Rコード領域で5.48%の削減(15,820,359 → 14,953,402バイト)
  • 余分なオフセット操作を削減することで、生成コードがより効率的になります

関連Issue

なし

その他

  • 内部実装の最適化であり、公開APIへの影響はありません
  • WebAssembly対象のコンパイルにのみ影響します

#132097 Remove and clarify PEAssembly constructor parameters

概要

PEAssemblyクラスのコンストラクタとAPIを簡潔にして、クラスの2つの使用モード(AssemblyBinderで束縛される場合とreflection emitの動的な場合)を明確に区別します。冗長なPEAssembly::Openオーバーロードと関連するコンストラクタパラメータを削除し、コンストラクタに前提条件アサートを追加して、束縛モードか動的モードかを明確化します。

変更内容

  • peassembly.h/cpp: PEAssembly::Open(PEImage*, BINDER_SPACE::Assembly*)オーバーロードを削除。コンストラクタを簡潔化し、AssemblyBinderで束縛されるか動的(reflection emit)かを区別する前提条件を追加。IsStrongNamed()メソッドを削除。
  • peassembly.inl: IsSystem()の戻り値型をBOOLからboolに変更。インラインIsStrongNamed()実装を削除。
  • assembly.hpp: Assembly::IsSystem()ラッパーの戻り値型をBOOLからboolに変更。Assembly::IsStrongNamed()ラッパーを削除。
  • ceeload.h: Module::IsSystem()ラッパーの戻り値型をBOOLからboolに変更。
  • assemblynative.cpp: アセンブリロード処理を更新し、PEImageとホストアセンブリを個別に渡さずに束縛アセンブリを直接渡すように変更。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • コード品質の改善により、PEAssemblyの使用パターンがより明確になり、保守性が向上します。
  • レビュー指摘:NULLからnullptrへの変更が推奨されています(ネイティブコード標準に準拠するため)。
  • 削除されたコンストラクタパラメータは特定の1つのケースでのみ使用されており、その場合は束縛アセンブリから導出されていたため、単に束縛アセンブリを直接渡すことで同等の機能が実現できます。

#132091 Fix contract violation in CodeVersionManager::EnumerateClosedMethodDescs

  • 作成者: @rcj1
  • 作成日時: 2026年08月10日 18:33:19(UTC)
  • マージ日時: 2026年08月11日 00:08:13(UTC)
  • ラベル: area-VM-coreclr

概要

CoreCLRのCodeVersionManager::EnumerateClosedMethodDescsメソッドにおけるNOTHROW契約違反を修正します。潜在的に例外をスローするMethodDesc::GetAsyncVariantNoCreate呼び出しを例外ハンドリングでラップし、例外がメソッドから逃げることを防ぎます。

変更内容

  • src/coreclr/vm/codeversion.cpp: GetAsyncVariantNoCreate()呼び出しをEX_TRY/EX_CATCH_HRESULTでラップし、例外をHRESULTとして伝播させるように変更。既存のNULLメソッドディスクリプタと非ジェネリックメソッドパスの動作は保持しつつ、async-thunkリダイレクションパスを契約準拠にしています。

パフォーマンスへの影響

影響なし

関連Issue

#132091

その他

このは修正は契約違反(コンパイラ/ランタイム検証システムの内部実装の一部)を解決するもので、外部公開APIの変更ではありません。


#132086 Add regression test for tuple swap with implicit indexer references

概要

Issue #117122で報告されたクラッシュ(VisitImplicitIndexerReference内のDebug.Assert失敗)の回帰テストを追加します。このクラッシュは、Index演算子(^)でアクセスされるSpan<T>要素を含むタプルスワップのデコンストラクション代入を分析する際にILLink Roslyn Analyzerで発生していました。

Span<int> span = stackalloc int[4];
(span[^1], span[^2]) = (span[^2], span[^1]);

変更内容

  • PropertyDataFlow.cs: 既存のImplicitIndexerAccessテストクラスにTestTupleSwapテストケースを追加(+11行)。タプルスワップのデコンストラクション代入で^演算子による暗黙的インデクサアクセスをカバーします。

根本原因と修正: デコンストラクション代入の左側ではGetValueUsageInfoがValueUsageInfo.Write(Referenceフラグなし)を返していたため、VisitImplicitIndexerReferenceの旧来のアサーションが失敗していました。この問題は既に#131624(「デコンストラクション代入のデータフロー対応追加」)で修正されており、本PRはその修正の動作を保証する回帰テストです。

パフォーマンスへの影響

影響なし(テストケース追加のみ)

関連Issue

#117122(本PR で修正) #131624(根本修正) #123767(関連)

その他

  • テストはILLink Roslyn Analyzer、IL Trimmer、NativeAOTの3つのツール共通テストファイルに統合され、すべてで動作確認済みです。
  • テストはPR #131624適用前のコードでクラッシュを再現し、適用後に成功することが確認されています。

#132084 Limit Helix job monitor to runtime pipeline

  • 作成者: @mmitche
  • 作成日時: 2026年08月10日 16:57:28(UTC)
  • マージ日時: 2026年08月11日 08:01:01(UTC)
  • ラベル: area-Infrastructure

概要

Helix Job Monitorの有効化スコープを制限するための設定変更です。共有パイプライン変数のデフォルト値をfalseに変更し、runtimeパイプラインでのみ明示的に有効化することで、他のスタンドアロンパイプラインへの予期しない影響を防ぎます。

変更内容

  • eng/pipelines/common/variables.yml: enableHelixJobMonitorのデフォルト値をtrueからfalseに変更
  • eng/pipelines/runtime.yml: enableHelixJobMonitorを明示的にtrueに設定

パフォーマンスへの影響

影響なし(パイプライン設定の変更であり、ランタイムのパフォーマンスには直接的な影響なし)

関連Issue

#129690(Helix Job Monitor機能の初回導入)

その他

本変更は、#129690で導入されたHelix Job Monitor機能が、意図しない範囲(runtime以外のスタンドアロンパイプライン)で有効化される問題を修正するものです。修正前は、runtime-coreclr superpmi-collectなどのスタンドアロンパイプラインでHelix submissionの監視ジョブなしに設定され、提出後すぐに戻っていました。修正後はruntimeパイプラインのみが完全な監視機能を利用します。


#132083 Signal GC suspension pending during NativeAOT thread suspension

  • 作成者: @Copilot
  • 作成日時: 2026年08月10日 16:57:15(UTC)
  • マージ日時: 2026年08月11日 17:40:46(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT のスレッド停止機構における GC 停止ペンディング状態の更新漏れを修正しました。スレッド停止時に RhpTrapThreads を設定する際、GC 停止ペンディング状態を更新していなかったため、バックグラウンド GC の allow_fgc() がフォアグラウンド GC のスレッド停止中に処理を譲らず、BGC スレッドが数十~数百ミリ秒間スピンロックし続ける問題を解決します。

変更内容

  • src/coreclr/nativeaot/Runtime/threadstore.cpp: NativeAOT スレッド停止処理に GC 停止ペンディング状態の更新処理を追加(+2行)

パフォーマンスへの影響

改善:バックグラウンド GC がフォアグラウンド GC のスレッド停止中に不必要なスピンロックを行わなくなるため、BGC スレッドのスピン期間(数十~数百ミリ秒)が削減され、CPU 使用率と遅延が改善されます。

関連Issue

#132064

その他

なし


#132077 Ensure FileStream.CanSeek works for PIPE_ACCESS_OUTBOUND pipes

  • 作成者: @Copilot
  • 作成日時: 2026年08月10日 13:21:36(UTC)
  • マージ日時: 2026年08月11日 16:25:20(UTC)
  • ラベル: area-System.IO

概要

Windows上で書き込み専用の名前付きパイプ(PIPE_ACCESS_OUTBOUND)に対してFileStream.CanSeekが正しく動作するよう修正しました。SafeFileHandle.CanSeekのキャッシング方式を統一し、ファイル型検査で安全にプローブできないハンドルに対しても確実にFileStreamを構築できるようにします。

変更内容

  • SafeFileHandle.cs(共有部分): _canSeekキャッシュフィールドとCanSeekプロパティを追加し、プラットフォーム固有の実装で共有。
  • SafeFileHandle.Windows.cs: SetFilePointerEx(..., 0, FILE_CURRENT)を使用してシーク可能性を判定し、結果をキャッシュする実装を追加。
  • SafeFileHandle.Unix.cs: キャッシングが統一されたため、プラットフォーム固有のCanSeekメンバを削除。
  • GetFileType.Windows.cs(テスト): 書き込み専用名前付きパイプハンドルに対して同期・非同期のFileStreamがCanSeek == falseを報告し、IsAsyncを保持することを検証するリグレッションテストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#131503

その他

  • 修正はランタイムライブラリの内部実装(SafeFileHandle)に対するもので、公開APIの変更は含まれません。
  • 不正なハンドルのプローブ時に発生していた例外を回避し、より信頼性の高い動作を実現します。
  • コメント欄で指摘されている通り、テストコード内の重複したCreateNamedPipe P/Invoke宣言を削除し、Interop.Kernel32.CreateNamedPipeFileHandleに統一することが推奨されています。

#132065 Disable DnsResolverTest.ResolveAddresses_NonExistent_ReturnsNxDomain on Windows Server 2025

  • 作成者: @rzikm
  • 作成日時: 2026年08月10日 08:04:44(UTC)
  • マージ日時: 2026年08月11日 07:45:25(UTC)
  • ラベル: area-System.Net

概要

Windows Server 2025環境でのDNS解決テストの不安定性に対応しました。DnsResolverTest.ResolveAddresses_NonExistent_ReturnsNxDomainテストは、Windows Server 2025のCI環境で予期されたNxDomainの代わりにServerFailureを返すため、当該プラットフォームでのみスキップされるようになります。他のWindows バージョンでは継続して実行されます。

変更内容

  • src/libraries/System.Net.NameResolution/tests/FunctionalTests/DnsResolverTest.cs: [ActiveIssue]属性を追加し、PlatformDetection.IsWindowsServer2025条件下でテストをスキップするよう設定(+1行)

パフォーマンスへの影響

影響なし

関連Issue

#131188

その他

テストスキップはWindows Server 2025環境限定であり、他のプラットフォームでのテストカバレッジは維持されます。


#132029 [crossgen2][wasm] Shrink Code Section Relocs

  • 作成者: @adamperlin
  • 作成日時: 2026年08月08日 00:09:14(UTC)
  • マージ日時: 2026年08月11日 20:30:49(UTC)
  • ラベル: area-ReadyToRun

概要

WasmObjectWriterにおけるコードセクションの再ロケーション最適化実装。JITが生成するWasmコード内の全再ロケーションは現在、最大32ビットULEB長である5バイトにパディングされていますが、実際の値はより短い場合が多くあります。このPRではコードセクション内の再ロケーションを最小長に書き換える手続きを実装し、対応するLEB長を更新します。非コードセクションの動作は変わりません。結果としてSystem.Private.CoreLibで約5%のサイズ削減を実現します。

変更内容

  • WasmObjectWriter.cs: 再ロケーション解決をソース→ディスティネーションストリームフローに対応させ、長さプリフィックス付きコードブロブのパース・書き換えロジックを追加。変数長再ロケーションの縮小とブロブサイズの更新に対応
  • DwarfHelper.cs: コードブロブパース用のストリームベースULEB128リーダーを追加
  • Relocation.cs: 変数長Wasm再ロケーションの検出と最小化LEB符号化の記述をサポートするヘルパー追加
  • テストファイル: テストケース対応の軽微な変更

パフォーマンスへの影響

System.Private.CoreLibで約5%のバイナリサイズ削減。メモリ使用量削減に貢献しますが、実行時パフォーマンスへの直接的な影響は記述されていません。

関連Issue

なし

その他

コード品質に関する指摘:WasmObjectWriter.cs:734行で未使用のローカル変数sectionStreamが宣言されており、削除が推奨されています(再ロケーション解決により既にsection.StreamからwebcilStreamへのコピーが実行されているため)。


#132023 System.IO: Make text and sequence streams non-seekable

  • 作成者: @jozkee
  • 作成日時: 2026年08月07日 18:20:57(UTC)
  • マージ日時: 2026年08月11日 21:37:15(UTC)
  • ラベル: area-System.IO

概要

複数のStream実装(ReadOnlySequenceStream、StringStream、メモリ向けStream)を意図的に非シーク可能な設計に統一し、セキュリティと性能を改善するPRです。後方移動は記述の再実行やセグメント走査が必要になり、悪意あるセグメンテーションやO(N)の最悪ケース動作につながるため、これらのStreamはシーク不可とします。

変更内容

  • ReadOnlySequenceStream: シーク状態と走査ロジックを削除し、Length/Position/Seekで一貫してNotSupportedExceptionをスロー(内部実装の簡略化、約51行削減)
  • StringStream: 非シーク可能な理由(エンコーダ再実行の必要性)の説明コメント追加、Length/Position/Seekの例外スロー
  • ReadOnlyMemoryStream/WritableMemoryStream: バッキングメモリの内容が即座に公開されることを明確化するドキュメント更新
  • テスト更新: ReadOnlySequenceStream適合性テスト(405テスト)とStringStreamテスト(275テスト)を非シーク可能な動作に合わせて更新
  • リソース文字列: NotSupported_UnseekableStreamリソース追加、不要なシーク関連文字列削除

パフォーマンスへの影響

改善:ReadOnlySequenceStreamのシーク関連ロジック削除により、不要な走査処理が排除される。後方位置付けを避けることで、セグメント境界の走査によるO(N)の最悪ケース動作を回避。

関連Issue

なし

その他

  • この変更は公開API(Length/Position/SeekがNotSupportedExceptionをスロー)に影響するため、非シーク可能なStreamを想定していないコードでは破壊的変更となる可能性があります
  • セキュリティ考慮:ReadOnlySequenceStreamにおいて、ネットワークパケットフレーミングを通じてセグメント境界が間接的に制御される場合のセグメンテーション攻撃回避
  • 検証:CoreLib(チェックおよびRelease構成)、System.Memory構築完了

#132018 Fix NativeAOT aggregate executable dSYM publish paths

概要

NativeAOT集約実行可能ファイルのdSYMメタデータ公開パス処理を修正。複数の拡張dSYMエントリが同じ公開パスに割り当てられ、PE以外のファイルが.dll拡張子を持つことになる問題を解決。集約実行可能ファイルテストを拡張し、macOSでdSYMバンドルを生成して正しいパス構造を検証。

変更内容

  • Microsoft.NETCore.Native.Publish.targets: dSYM公開パス割り当てロジックを修正。各展開dSYMエントリのメタデータを保持し、ファイル上書きを防止(+4/-1)
  • AggregateLibrary.csproj: macOS上での集約実行可能ファイルのdSYM検証テストを追加。Contents/Info.plistとContents/Resources/DWARFパスの存在確認テストを実装(+20/-0)

パフォーマンスへの影響

影響なし

関連Issue

#132018 dotnet/dotnet#8135 #128553

その他

  • 問題の背景: dotnet/dotnet#8135でASP.NET Core NativeAOTツール用シンボルの公開機能が有効化され、VMRパッケージ署名時に本問題が露出
  • 修正前の動作: すべてのdSYMバンドルが同じ宛先パス(例:dotnet-dev-certs.dSYM/dotnet-dev-certs.dll)に割り当てられ、ファイルが上書きされて約207バイトのYAML再配置ファイルが残存
  • 修正後の動作: SignToolが.dll拡張子のファイルをPEReader形式と判断してSystem.BadImageFormatException: Unknown file formatを投げる問題を解決
  • テスト検証: 回帰テストがビルドおよびNativeAOT集約実行可能ライブラリテストで確認済み

#132010 Don't validate/materialize HTTP headers when logging them

概要

HTTP ロギング時のヘッダー値の検証・解析を回避する変更。HttpHeadersLogValue が HttpHeaders.NonValidated を使用するように変更され、TryAddWithoutValidation() で追加されたヘッダーがログ出力時に再シリアライズされる問題を解決します。

// 修正前: ログ出力時にヘッダーが再シリアライズされていた
request.Headers.TryAddWithoutValidation("Accept", "application/vnd.example+json;version=1");
// sent as: Accept: application/vnd.example+json; version=1 (値が改変)

// 修正後: NonValidated を使用してヘッダーが改変されない

変更内容

  • HttpHeadersLogValue.cs: AddHeaders ヘルパーメソッドを新規追加し、.NET 5+ では HttpHeaders.NonValidated を使用してヘッダーを列挙。netstandard2.0/net462 は従来の列挙方法を維持(条件付きコンパイル)
  • ヘッダー値の格納方式変更: IEnumerable<string> から HeaderStringValues.ToString() で結合した単一の string に変更。出力テキストは変わらず
  • リスト事前割当: HttpHeadersNonValidated.Count でサイズを最適化
  • 回帰テスト追加: HttpHeadersLogValueTest に、フォーマット出力と NonValidated が修正後も生の値を返すことを確認するテスト追加

パフォーマンスへの影響

改善。ロギング時の不要な検証・解析処理が削減され、ヘッダー列挙時のメモリアロケーション量が削減されます(リスト事前割当により)。

関連Issue

#132009

その他

互換性への注意: 公開 API である IReadOnlyList<KeyValuePair<string, object>> 内の値の型が IEnumerable<string> から string に変更されます。ログ出力テキストは同一ですが、構造化ロギング利用時に値を IEnumerable<string> にキャストしているコードは影響を受ける可能性があります。レビュワーが代替案(列挙可能な形状の保持)を検討する可能性があります。

Copilot より 2 件のセキュリティ懸念がフラグされており、ヘッダー値の機密情報削除時の処理と構造化ロガー経由での漏洩防止の強化が推奨されています。


#131991 Deduplicate minipal thread ID TLS cache.

概要

minipal_get_current_thread_id()で使用されるスレッドID TLSキャッシュの重複を排除しました。関数がinternal linkageを持つため、以前は翻訳単位ごとに異なる8バイトのTLSスロットが生成されていました。in-process crash reporterの有効化により、Linux ARM64のglibc静的TLS割り当てを超過し、_dl_tlsdesc_dynamicによる動的解決のオーバーヘッドが発生していました。この変更により、単一の共有TLS変数を使用することでTLSフットプリントを削減し、ランタイムパフォーマンスを改善します。

変更内容

  • src/native/minipal/thread.h: 関数ローカルなstatic thread_local変数をextern TLS変数minipal_cached_thread_idに変更し、MINIPAL_THREAD_LOCALマクロを追加(C/C++の両方のTLSストレージクラス構文に対応)
  • src/native/minipal/thread.c: 共有TLS変数minipal_cached_thread_idを定義し、すべての翻訳単位が同じTLSスロットを参照するようにしました
  • src/native/minipal/CMakeLists.txt: Unixホスト上でthread.cをコンパイルするよう設定を更新

パフォーマンスへの影響

改善あり。変更前後での検証結果:

  • 変更前: 2つのローカル8バイトTLSスロット + 16バイトのTLSセグメント
  • 変更後: 1つの共有8バイトTLSスロット

TLSフットプリントが削減され、glibc内のスレッドID取得呼び出しが_dl_tlsdesc_return(より効率的)で解決されるようになり、メモリ割り当て、スレッド静的アクセス、その他ランタイム一般的なパスでのオーバーヘッドが軽減されます。

関連Issue

#131954

その他

なし


#131968 Remove unused OpenSSL Interop

  • 作成者: @vcsjones
  • 作成日時: 2026年08月06日 21:07:36(UTC)
  • マージ日時: 2026年08月11日 21:14:21(UTC)
  • ラベル: area-System.Security

概要

Unix上のSystem.Security.Cryptography.Nativeから未使用のOpenSSL相互運用メソッドとP/Invoke宣言を削除し、ネイティブサーフェスエリアとデッドコードを削減するクリーンアップです。削除対象はCryptoNative_X509Duplicate、CryptoNative_SetCiphers、CryptoNative_BioCtrlPending、CryptoNative_BigNumFromBinaryおよびそれらの対応する管理側のインターオップ宣言です。

変更内容

ネイティブ実装の削除:

  • pal_x509.c/h: CryptoNative_X509Duplicateの実装と宣言を削除
  • pal_ssl.c/h: CryptoNative_SetCiphersの実装と宣言を削除
  • pal_bio.c/h: CryptoNative_BioCtrlPendingの実装と宣言を削除
  • pal_bignum.c/h: CryptoNative_BigNumFromBinaryの実装と宣言を削除
  • entrypoints.c: 削除したエクスポートをDllImport リゾルバーテーブルから削除

マネージド側の削除:

  • Interop.X509.cs: DecodeX509(IntPtr, ...)とX509Duplicateインポートを削除
  • Interop.Ssl.cs: SslSetCiphersと未使用のオーバーロードを削除
  • Interop.SetProtocolOptions.cs: SslCtxSetProtocolOptions(IntPtr, ...)を削除
  • Interop.BIO.cs: BioReadとBioCtrlPendingインポートを削除
  • Interop.Bignum.cs: BigNumFromBinaryと関連ヘルパーを削除し、BigNumToBinaryをSpan ベースのシグネチャに変更

パフォーマンスへの影響

影響なし(デッドコード削除であり、機能的な最適化ではないため)

関連Issue

なし

その他

Copilotレビューで、削除されたX509Duplicateを参照するコメントがOpenSslX509CertificateReader.cs(CopyWithPrivateKey周辺)に残存することが指摘されています。該当コメントの更新が推奨されます。


#131941 [automated] Merge branch 'release/8.0' => 'release/8.0-staging'

概要

release/8.0ブランチからrelease/8.0-stagingブランチへの自動マージPRです。dotnet-botによるcommitが含まれており、主にビルド設定、バージョン情報、NuGetソース設定、ローカライゼーションビルド設定が更新されています。

変更内容

  • eng/Version.Details.xml: 依存関係バージョン情報の更新
  • eng/Versions.props: プロジェクトバージョンプロパティの更新
  • eng/common/SetupNugetSources.ps1 / .sh: NuGetソース設定スクリプトの改善
  • global.json: .NET SDKバージョン情報の更新
  • eng/common/templates/job/onelocbuild.yml: ローカライゼーションビルドテンプレートの改善
  • eng/common/templates/steps/source-build.yml: ソースビルドステップテンプレートの改善

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは自動生成されたマージコミットです。マージ時は必ずマージコミットを作成し、squashやrebaseは使用しないでください。マージ競合が発生した場合は手動で解決が必要です。


#131939 [automated] Merge branch 'release/9.0' => 'release/9.0-staging'

概要

release/9.0ブランチからrelease/9.0-stagingブランチへの自動マージPRです。dotnet-botによるコミットをrelease/9.0-stagingに同期します。このPRは自動マージされず、手動でマージコミットとして完了させる必要があります。

変更内容

  • バージョン管理: eng/Version.Details.xml、eng/Versions.props の依存関係バージョン更新
  • ビルド構成: NuGet.config、global.json の更新
  • CI/CDパイプライン:
    • eng/common/Get-GitHubAppToken.ps1(新規追加、154行)
    • eng/common/core-templates/job/onelocbuild.yml(ローカライズビルド設定拡張)
    • eng/common/core-templates/steps/get-github-app-token.yml(新規追加、GitHub App認証処理)
    • eng/common/templates-official/steps/get-github-app-token.yml、eng/common/templates/steps/get-github-app-token.yml(GitHub App認証ステップ追加)
  • その他: publish-logs.yml、common-variables.yml、codeql-build.yml などの不要行削除、tools.ps1/tools.sh の軽微な修正

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRは自動生成されたブランチ間マージです
  • マージ時はマージコミットを使用し、squashやrebaseは避けてください
  • マージコンフリクトが発生した場合は手動で解決が必要です
  • GitHub App認証の新規実装により、CI/CDパイプラインのセキュリティ強化が行われています

#131919 Enable Moq HostTests on ios

概要

iOS等のトリミング有効なワークロードでMoqを使用したHostTestsを実行可能にするPR。Moqが反射APIを多用するため、リンカー記述子を拡張して必要な型をトリミング時に保持し、プラットフォーム固有のスキップを削除しました。

変更内容

  • ILLink.Descriptors.Castle.xml: Moq.Async名前空間をrootとして追加し、トリミング時の削除を防止
  • Microsoft.Extensions.Hosting.Unit.Tests.csproj: 共有のCastle/Moqリンカー記述子参照をテストプロジェクトに追加
  • HostTests.cs: Apple mobile向けの[ActiveIssue(...128405...)]属性を7個削除(IsReflectionEmitSupportedゲートは維持)

パフォーマンスへの影響

影響なし

関連Issue

#128405

その他

  • 変更は内部実装に限定(テスト用の記述子ファイルとテストコード)
  • 公開APIへの破壊的変更なし
  • コメント修正の提案あり:Moqを使用したテストの条件ゲート(Reflection.Emit対応 + トリミング記述子)を明確化することで、将来の混乱を避けられる

#131828 Don't attach code-fix locations from outside the analyzed compilation

概要

DynamicallyAccessedMembers アナライザーが、参照プロジェクト内のシンボルに対して診断を報告する際に、Roslyn検証エラー(AD0001)でクラッシュする問題を修正します。根本原因は、別のコンパイレーション内の宣言に指すコード修正ロケーションを AdditionalLocations に追加していたことです。修正は Compilation.ContainsSyntaxTree() で検証を厳密化し、分析対象外のロケーション添付を防ぎます。

変更内容

  • DiagnosticContext.cs: Compilation を必須パラメータとしてコンストラクタに追加し、コード修正ロケーション添付時に Compilation.ContainsSyntaxTree() で検証を実施(内部実装の変更)
  • DynamicallyAccessedMembersAnalyzer.cs: Location.IsInSource ガードを Compilation.ContainsSyntaxTree() に置き換え(IL2092/IL2093/IL2094に対応)
  • TrimAnalysis 関連ファイル群: DiagnosticContext 構築時に Compilation を渡すよう全サイトを更新
  • テスト追加: AdditionalProjects/AdditionalProjectReferences を使用した回帰テスト2件追加(IL2075とIL2092それぞれ)

パフォーマンスへの影響

影響なし

関連Issue

#109352

その他

  • 問題背景: Visual Studio の「開かれていないファイルで分析を実行」機能の有効化時、CompilationReference 経由で参照プロジェクト内のシンボルが源シンボルとして認識される場合のみ発生。コマンドラインビルドはメタデータ参照を使用するため問題が顕在化しない
  • 影響範囲: IL2075(DynamicallyAccessedMembers)、IL2092/IL2093/IL2094(メソッドオーバーライド)が該当
  • セキュリティ影響: なし
  • 互換性: 内部実装の変更のみで、公開APIへの影響なし

#131821 [CrashReporter] Enable InProc CrashReporter for crashing GC threads

概要

InProc CrashReporterがGCスレッドのクラッシュ時にマネージドスレッドの列挙を可能にする変更です。サスペンション所有権を追跡することで、クラッシングスレッドが既存のサスペンションを再利用したり、独自のサスペンションを確立・再開したりできるようになります。これにより、特定のGCシナリオでスタックウォーキングの精度が向上します。

変更内容

  • src/coreclr/vm/crashreportstackwalker.cpp: サスペンション所有権の追跡ロジックを導入
    • CrashReportSuspensionOwnershipを導入し、サスペンションが「利用不可」「クラッシングスレッド所有」「CrashReporter所有」の3状態を区別
    • クラッシングスレッドがThreadStoreロックを所有している場合のみ既存サスペンションを再利用
    • CrashReporter自身がサスペンション確立時のみランタイム再開を実行
    • 既存のスレッド列挙スキップロジックは、サスペンションが不完全または他スレッド所有時に継続

パフォーマンスへの影響

影響なし(デバッグ・診断機能の改善であり、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

なし

その他

この変更は内部実装(crashreportstackwalker.cpp)に限定され、公開APIへの影響はありません。GCやスレッド管理の内部メカニズムに関する変更で、スタックダンプやクラッシュ時の診断情報の品質向上を目的としています。


#131764 Avoid redundant Java GC bridge graph computation

  • 作成者: @steveisok
  • 作成日時: 2026年08月03日 19:14:39(UTC)
  • マージ日時: 2026年08月11日 05:13:19(UTC)
  • ラベル: area-GC-coreclr

概要

AndroidのJava GC bridge処理において、クライアントが既に前回の結果を処理中の場合、不要なクロスリファレンス計算をスキップする最適化を実装しました。新しいインターフェースメソッドIGCToCLR::IsClientBridgeProcessingActive()を追加し、GCがクライアント処理状態をチェックしてから計算を開始するようになります。これにより、特にAndroidのUI Thread ブロッキングに由来するドロップフレーム問題を軽減します。

変更内容

  • GC/EE インターフェース変更:EE_INTERFACE_MAJOR_VERSIONを4から5にバンプ、IGCToCLRにIsClientBridgeProcessingActive()の純粋仮想メソッドを追加(破壊的変更)
  • CoreCLR VM実装:GCToEEInterface::IsClientBridgeProcessingActive()をvcenv.ee.cppに実装
  • NativeAOT実装:Java marshalインターフェース拡張(IsGCBridgeActive())と対応実装を追加
  • GC bridge最適化:ShouldProcessBridgeObjects()により、クライアント処理中のSCC計算(Tarjan pass)とメモリ割り当てをスキップ
  • スタンドアロンGC対応:GCサンプルとスタンドアロン実装にスタブメソッド追加
  • 設定項目:GCBridgeMinIntervalMs(パブリック名System.GC.BridgeMinIntervalMs)を追加

パフォーマンスへの影響

改善点:

  • Tarjanアルゴリズムの不要な実行がスキップされることで、CPU使用率削減
  • クロスリファレンス計算に伴うメモリ割り当てが削減
  • 特にAndroidでの頻繁なGC collectionに伴うUI Thread ブロッキングが軽減され、ドロップフレーム削減が期待できる

動作保証:この変更は動作的に中立です。bridge objectはクロスリファレンス計算の有無に関わらずプロモーションされるため、計算スキップは死Java peer報告を遅延させるのみで、早期回収はしません。

関連Issue

#131370

その他

  • 本PRはスコープダウン版:タイミングヒューリスティックはBrzVladのリクエストにより削除済み
  • Android(arm64 Release)およびmacOS(arm64 Checked)で検証済み
  • FEATURE_JAVAMARSHAL有効な設定で動作確認
  • EE インターフェースメジャーバージョン変更のため、GC/EE間の互換性要件が変更されます(既存の古いGC実装はこのバージョンでは動作不可)

#131475 [release/10.0] [mono] Fix interface call in case of reabstraction

概要

インターフェースの再抽象化(reabstraction)による不正なメソッド解決でアプリケーションがクラッシュする問題を修正しました。インターフェースコール時に正しくないメソッドに解決されていた問題を、仮想テーブルスロット計算の修正で解決します。

サンプルコード:

interface IBase { int R00 { get; } }
interface IDerived : IBase { abstract int IBase.R00 { get; } }
class Implementation : IDerived { int IBase.R00 => -1; }

(IDerived)(new Implementation()).R00; // 正しく実装メソッドが呼ばれるように修正

変更内容

  • src/mono/mono/metadata/object.c: インターフェースコール時の対象仮想テーブルスロット計算処理にインターフェース再抽象化ケースへの対応を追加(+4行)
  • src/tests/Loader/classloader/DefaultInterfaceMethods/regressions/ReabstractedInterfaceMethodIMT.cs: 回帰テストケース追加(+408行)
  • src/tests/Loader/classloader/DefaultInterfaceMethods/regressions/ReabstractedInterfaceMethodIMT.csproj: テストプロジェクトファイル追加(+8行)

パフォーマンスへの影響

影響なし

関連Issue

#131219(オリジナルのPull Request)

その他

  • Monoランタイムの内部実装(非公開API)への修正です
  • 顧客報告の実際の問題に基づいており、AngleSharpを使用するアプリケーションで確認されました
  • リスク評価は低レベルです(修正はインターフェースコール解決に限定される)
  • release/10.0ブランチへのバックポートです

#131434 [release/10.0] Fix native EH in external shared libs on macOS

概要

macOSにおいてネイティブCライブラリから標準C例外(std::out_of_rangeなど)がスローされた際、ホストプロセス内のローカルコピーされたtypeinfoが優先的に解決され、正しく例外をキャッチできない問題を修正します。外部共有ライブラリのシンボル可視性を制限することで、libc++のtypeinfoが正しく参照されるようになります。

変更内容

  • src/coreclr/hosts/corerun/CMakeLists.txt: CMakeビルド設定に8行追加、シンボルの非表示設定(-fvisibility=hidden等)を追加
  • src/native/corehost/apphost/CMakeLists.txt: 同様にシンボル可視性制限オプションを追加
  • src/native/corehost/dotnet/CMakeLists.txt: 同様にシンボル可視性制限オプションを追加

ホスト(dotnet、apphost、corerun、nethost)がC標準例外のtypeinfoをエクスポートするのを防ぎ、外部共有ライブラリがlibcの正しなtypeinfoを参照できるようにします。(corerunの_GetCurrentClrDetailsのみ非表示対象から除外)

パフォーマンスへの影響

影響なし

関連Issue

#130693(元のPR)

その他

  • release/10.0への既存修正のバックポート
  • リスク評価:低(ホストからのシンボルエクスポート制限のため、外部APIには影響なし)
  • 顧客報告の問題に対応した修正で、CI及びローカルテスト済み

#130688 Avoid rooting cryptography through ZipArchive on browser

概要

browser-wasm プラットフォームで ZipArchive 使用時に不要な System.Security.Cryptography の参照を排除し、トリミングされたアプリケーションサイズを削減します。WinZip AES(browser で未サポート)をブラウザ固有のスタブに置き換え、ZipCrypto は暗号化ライブラリ依存なしに対応させます。

変更内容

  • WinZip AES の除外: browser ビルドから WinZip AES 実装ファイルと System.Security.Cryptography プロジェクト参照を条件付きで除外
  • browser 向けスタブ: WinZipAes.PlatformNotSupported.cs で WinZip AES API が PlatformNotSupportedException をスロー
  • ZipCrypto の暗号化ライブラリ依存性を削除:
    • ZipCryptoStream.Random.BrowserOrWasi.cs: ヘッダーランダム性を Guid.NewGuid() で生成
    • ZipCryptoStream.ClearSensitiveData.cs: プールされたパスワードバッファを Array.Clear で消去
  • 型宣言の拡張: ZipArchiveEntry.cs と ZipArchiveEntry.Async.cs で暗号化ストリーム変数を Stream 型に拡張(browser スタブ対応)
  • テスト追加: browser 上の ZipCrypto 機能確認と wasm 依存関係から暗号化ライブラリが除外されたことを検証

パフォーマンスへの影響

影響なし(トリミングされたアプリケーションサイズの削減が主目的で、実行時パフォーマンスへの変更なし)

関連Issue

#130650(#122093 からのリグレッション修正)

その他

  • 互換性: browser-wasm での WinZip AES は PlatformNotSupportedException をスロー(既存動作の継続)、ZipCrypto は引き続きサポート
  • 内部実装: 暗号化ライブラリへの依存性は内部実装レベルで削除
  • 審査指摘: Copilot による複数の指摘あり(WinZipAesKeyMaterial の前方宣言構文エラー、wasi ビルドへの condition 不備など)

目次