Pull Request on 2026年04月22日

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

注意点

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


目次

  1. #127291 Fix copy-paste bugs in PrecodeMachineDescriptor StubPrecode block
  2. #127289 [cDAC] Add Apple to RuntimeInfoOperatingSystem
  3. #127288 Remove passing ILTrim tests from expected failures list
  4. #127284 Switch to the arcade-skills plugin for ci-analysis
  5. #127241 Fix logical condition in ComWrappers.TryGetComInterfaceDispatch
  6. #127223 Fix trimability in a couple more test projects
  7. #127221 Fix trimming warnings in System.Diagnostics.Process tests
  8. #127215 Remove unused FileSystemOperationRecorder from FileSystemGlobbing tests
  9. #127210 Implement Process.Run, RunAsync, RunAndCaptureText, RunAndCaptureTextAsync APIs
  10. #127200 Fix .NETFramework build breaks
  11. #127199 Fix x86 DAC stack walk regression from Environment.CallEntryPoint skip
  12. #127194 Add obsolete compatibility shims for moved Microsoft.Extensions.Logging internal types
  13. #127192 Remove RSA guard for OSSL
  14. #127161 Avoid a duplicate definition of CONTEXT_UNWOUND_TO_CALL if building with the v10.0.28000.0 SDK
  15. #127152 Fix dataflow analysis for MakeGenericType/MakeGenericMethod in local methods
  16. #127147 [browser] Remove CoreCLR test exclusions using native relink
  17. #127090 Fix UnreachableBody with only ref to assembly.
  18. #127081 [mobile] Skip GetMaxCompressedLength test on mobile platforms
  19. #127051 DI: prevent keyed-instance/scoped call-site cache collision during scope validation
  20. #127022 Implement SafeProcessHandle.WaitForExit* methods
  21. #126990 Implement TrimmingDescriptorNode for ILTrim XML descriptor support
  22. #126804 Use source-build-assets repo
  23. #126331 [release/10.0] Improve UnwindInfoTable's performance
  24. #126279 fix import of SPN with Kerberos realm
  25. #126247 [Release/10.0] Pass down DJI and MethodDesc to avoid unnecessary PtrHashMap lookup
  26. #126140 Scope installer helix tests to installer changes (keep osx_arm64 for coreclr)
  27. #125637 [release/10.0] Do not store result of cast in IDynIntfCastable scenarios

#127291 Fix copy-paste bugs in PrecodeMachineDescriptor StubPrecode block

概要

PrecodeMachineDescriptorのStubPrecodeブロック初期化ロジックにおける2つのコピペバグを修正します。契約バージョン3(PrecodeStubs_3)がStubBytes/StubIgnoredBytesフィールドを正しく読み込み・設定し、Fixupプリコードデータを破損させないようにします。

変更内容

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/PrecodeMachineDescriptor.cs

  • ReadFieldが誤ってnameof(FixupStubPrecodeSize)を使用していた箇所をnameof(StubPrecodeSize)に修正(StubPrecodeSizeが正しいフィールド値を読み込むように)
  • else分岐で誤ってFixupBytes/FixupIgnoredBytesをnullにしていた部分をStubBytes/StubIgnoredBytesに修正(Fixupプリコードデータの破損防止)

パフォーマンスへの影響

影響なし

関連Issue

#115746

その他

  • 本修正はTryGetKnownPrecodeTypeで利用されるPrecodeStubs_3のバイトパターンプリコード識別に影響する内部実装の修正です
  • データ診断・契約読み取り機能の信頼性向上に関わる重要な修正です

#127289 [cDAC] Add Apple to RuntimeInfoOperatingSystem

概要

cDAC(Compact Data Access Component)の RuntimeInfoOperatingSystem 列挙型に Apple 値を追加し、Apple プラットフォーム(macOS/iOS/tvOS/MacCatalyst)を他の Unix ターゲットから区別できるようにしました。これにより、Apple ARM64 の特殊な呼び出し規約(スタック引数のアライメントが Linux ARM64 と異なる)を正しく処理できるようになります。

変更内容

  • IRuntimeInfo.cs — RuntimeInfoOperatingSystem 列挙型に Apple 値を追加(内部契約API)
  • datadescriptor.inc — TARGET_APPLE が定義された際に OperatingSystem = "Apple" を出力(TARGET_UNIX チェックより前に評価)
  • RuntimeInfo.md — 新しい Apple 値の説明と POSIX 互換性の補足を追加
  • RuntimeInfoDumpTests.cs — ダンプメタデータ "osx" のマッピングを Unix から Apple に変更

パフォーマンスへの影響

影響なし。前処理段階での条件分岐追加のみで、実行時の負荷変化はありません。

関連Issue

#127282(このPRで修正) #126408(後続PR:IsAppleArm64ABI の実装)

その他

互換性対応:

  • 古いランタイム + 新しいcDAC:旧ランタイムは macOS 上でも "Unix" を出力し続けるため、互換性維持
  • 新しいランタイム + 古いcDAC:旧cDAC が "Apple" をパースできず Unknown と判定されるが、既存の全チェックが == Windows / != Windows ベースなため影響なし
  • 契約バージョン(RuntimeInfo V1)の引き上げは不要

使用箇所: すべて src/native/managed/cdac 内に限定され、dotnet/runtime リポジトリ外での参照なし。現在のすべての呼び出し側が Windows との比較ロジックのため、新しい Apple 値の追加が既存動作を変えません。


#127288 Remove passing ILTrim tests from expected failures list

  • 作成者: @jkotas
  • 作成日時: 2026年04月22日 16:29:29(UTC)
  • マージ日時: 2026年04月22日 16:29:52(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

ILTrim テスト基盤のメンテナンス。期待される失敗リストから、現在パスしているテストを削除し、テストスイートの失敗期待値の正確性を保つ。

変更内容

  • ILTrimExpectedFailures.txt: 11行削除
    • FeatureSettings.FeatureDescriptors テストを期待失敗リストから削除
    • 複数の LinkXml.* テストを期待失敗リストから削除(現在パス状態のため)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

テスト インフラストラクチャの整理目的の変更。実装ロジックの変更ではなく、テストメタデータの更新。


#127284 Switch to the arcade-skills plugin for ci-analysis

  • 作成者: @lewing
  • 作成日時: 2026年04月22日 15:58:36(UTC)
  • マージ日時: 2026年04月22日 22:49:00(UTC)
  • ラベル: area-skills

概要

dotnet/runtime リポジトリの CI 分析およびVMRコードフロー分析スキルをローカル実装から dotnet/arcade-skills マーケットプレイス プラグインへ移行しました。ローカルの PowerShell スクリプトと参照ドキュメントを削除し、Copilot および Claude の設定を更新して dotnet-dnceng@dotnet-arcade-skills プラグインを有効にしました。

変更内容

  • 削除: ローカルの ci-analysis スキル(PowerShell スクリプト、定義ファイル、参照ドキュメント8ファイル)
  • 削除: ローカルの vmr-codeflow-status スキル(PowerShell スクリプト、定義ファイル、参照ドキュメント2ファイル)
  • 追加: .github/copilot/settings.json で dotnet-dnceng@dotnet-arcade-skills プラグインを有効化し、dotnet/arcade-skills マーケットプレイスソースを登録
  • 追加: .claude/settings.json で同様のプラグイン + マーケットプレイス設定を追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本変更は .NET ランタイムのビルドシステムやコア機能には影響を与えないインフラストラクチャ関連の変更です。CI 分析とVMRコードフロー分析は外部プラグインとして提供されることになります。


#127241 Fix logical condition in ComWrappers.TryGetComInterfaceDispatch

概要

ComWrappers.TryGetComInterfaceDispatchメソッドの論理条件バグを修正しました。OR演算子(||)をAND演算子(&&)に変更することで、COMオブジェクトのvtableがランタイム提供のIUnknown/IReferenceTrackerTarget実装と一致しない場合にのみ、"tagged interface"フォールバックパスを実行するようにしました。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ComWrappers.cs
    • 条件式をknownQI != A || knownQI != BからknownQI != A && knownQI != Bに修正(+1/-1)
    • これにより、既知のvtableが認識された場合に不要なQueryInterface(IID_TaggedImpl)呼び出しと版チェックを回避

パフォーマンスへの影響

改善あり。既知のCOMインターフェース実装に対して、不要なQueryInterface呼び出しと版チェック処理が削減されます。

関連Issue

なし

その他

  • 内部実装(private API)の修正
  • 論理バグの修正であり、破壊的変更なし
  • COMインタビリティの信頼性向上

#127223 Fix trimability in a couple more test projects

概要

複数のテストプロジェクトのトリマビリティ(Trim互換性)を改善するPRです。以前無効化されていたトリミング分析ツール(Trim Analyzer)を再度有効化し、生成された警告に対して標的化された抑制/アノテーションを追加するとともに、トリム非推奨APIをトリム友好的なAPIに置き換えています。主な変更は、EnableTrimAnalyzerフラグの有効化、DynamicallyAccessedMembers属性の追加、Enum.GetValues(typeof(T))からEnum.GetValues<T>()への移行です。

変更内容

  • トリミング分析の有効化: System.IO、System.IO.Hashing、System.IO.FileSystem.Watcher、System.Formats.Tar、System.Diagnostics.EventLog各テストプロジェクトの<EnableTrimAnalyzer>false</EnableTrimAnalyzer>を削除
  • トリミング警告の抑制: IL2075/IL2026警告に対して[SuppressMessage]を追加(TextWriterTests.cs、EventLogMessagesTests.cs)
  • リフレクション使用の安全化: NonCryptoHashTestDriver.csにDynamicallyAccessedMembers属性を追加
  • APIの置き換え: FileSystemWatcher関連テストでEnum.GetValues(typeof(T))をEnum.GetValues<T>()に置き換え(リフレクションベースの列挙を回避)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはILLink(トリミング分析ツール)チームへの提案(Cc @dotnet/illink)です。変更は内部テスト実装の修正であり、公開APIへの影響はありません。


#127221 Fix trimming warnings in System.Diagnostics.Process tests

概要

System.Diagnostics.Process テストにおけるトリミング警告を修正するため、トリムアナライザが静的解析できない obj.GetType().GetField(...) および assembly.GetType(...) パターンを、アナライザが解析可能な Type.GetType("FullName, AssemblyName") パターンに置き換えました。併せてテストプロジェクトのトリムアナライザを再有効化します。

変更内容

  • System.Diagnostics.Process.Tests.csproj: EnableTrimAnalyzer=false 設定を削除し、トリムアナライザを再有効化
  • ProcessTests.Unix.cs: ProcessWaitState 型のリフレクションを Type.GetType() のアセンブリ修飾名形式に変更
  • ProcessStartInfoTests.cs: DictionaryWrapper 型のリフレクションを Type.GetType() のアセンブリ修飾名形式に変更

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はテストコードの修正であり、ランタイムやライブラリの動作には直接的な影響を与えません。トリムアナライザによる静的解析の精度向上により、トリミング後のアセンブリの健全性が向上します。


#127215 Remove unused FileSystemOperationRecorder from FileSystemGlobbing tests

概要

FileSystemGlobbing テストから未使用の FileSystemOperationRecorder を削除するリファクタリング。このユーティリティはリフレクションを使用して匿名オブジェクトを辞書に変換していましたが、収集した Records リストはテストで一度も読まれていませんでした。削除により、トリミング警告(IL2075)を解消し、テストユーティリティコードを簡潔化できます。

変更内容

  • FileSystemOperationRecorder.cs: リフレクションベースの未使用ユーティリティを完全削除
  • MockDirectoryInfo.cs: レコーダーの依存関係を削除し、ネストされたモックオブジェクト生成を簡潔化
  • MockFileInfoStub.cs: レコーダー依存関係を削除
  • FileSystemGlobbingTestContext.cs: レコーダーフィールド/使用箇所を削除
  • PatternContextHelper.cs: MockDirectoryInfo コンストラクタ呼び出しを更新
  • Microsoft.Extensions.FileSystemGlobbing.Tests.csproj: トリミング分析器の抑止指定を削除

パフォーマンスへの影響

影響なし。テストユーティリティの簡潔化による軽微な改善が期待できますが、実行時パフォーマンスへの直接的な影響はありません。

関連Issue

なし

その他

本変更はトリミング対応時のアナライザーノイズ(IL2075警告)を完全に排除するものであり、NativeAOT/トリミング対応の改善につながります。


#127210 Implement Process.Run, RunAsync, RunAndCaptureText, RunAndCaptureTextAsync APIs

概要

Processクラスに4つの新しい静的APIを実装しました:Run、RunAsync、RunAndCaptureText、RunAndCaptureTextAsync。これらは標準出力/標準エラーの自動キャプチャ、タイムアウト、キャンセレーション対応など、一般的なプロセス実行シナリオを簡潔に実装できます。

サンプルコード:

// 出力をキャプチャして実行
var result = Process.RunAndCaptureText("dotnet", "--version");
Console.WriteLine(result.StandardOutput);

// タイムアウト付きで非同期実行
await Process.RunAsync("myapp.exe", timeout: TimeSpan.FromSeconds(30));

// ProcessStartInfoを使用した実行
var psi = new ProcessStartInfo("cmd.exe") { ... };
Process.Run(psi);

変更内容

  • 公開API追加(ref/System.Diagnostics.Process.cs)

    • Run(ProcessStartInfo) / Run(string, string?)
    • RunAsync(ProcessStartInfo, CancellationToken) / RunAsync(string, string?, CancellationToken)
    • RunAndCaptureText(ProcessStartInfo) / RunAndCaptureText(string, string?)
    • RunAndCaptureTextAsync(ProcessStartInfo, CancellationToken) / RunAndCaptureTextAsync(string, string?, CancellationToken)
  • 実装(Process.Scenarios.cs)

    • ProcessStartInfo/文字列オーバーロード対応
    • RunAndCapture*APIではRedirectStandardOutput/Errorが有効である必要(PSI直接変更なし)
    • 文字列オーバーロードはCreateStartInfoForCaptureヘルパーで自動設定
    • Async版はWaitForExitOrKillOnCancellationAsyncを使用
  • 新規型追加(ProcessTextOutput.cs)

    • キャプチャされた標準出力/標準エラーを保持するデータ型
  • テスト(RunTests.cs)

    • 40個のRunテスト、10個のStartAndForgetテストを実装
    • パラメータ検証、UseShellExecute/NotRedirected時のエラー処理、タイムアウト/キャンセレーションシナリオをカバー
  • リソース更新(Strings.resx)

    • エラーメッセージ5件を追加

パフォーマンスへの影響

影響なし

関連Issue

#126293

その他

  • RunAndCapture*APIにはRedirectStandardOutput/Errorが有効なProcessStartInfoが必須(バリデーション実装)
  • 全テストケース(50個)がパス完了

#127200 Fix .NETFramework build breaks

概要

.NETFramework(NET481)の垂直ビルド時に、PNSE(Platform-Specific Non-Emulated)アセンブリの XML ドキュメント生成処理が失敗する問題を修正します。UseCompilerGeneratedDocXmlFileが有効な場合、ローカルターゲティングパック(FrameworkList.xml)が存在しない .NET Framework ビルドで net11.0 の内部ビルドが失敗していました。修正により、ターゲティングパックの存在確認を追加して、その場合は PNSE doc-source の自己参照 ProjectReference をスキップするようにしました。

変更内容

  • eng/intellisense.targets: AddProjectReferenceToPNSEDocSource に FrameworkList.xml の存在確認ガード条件を追加。ローカルターゲティングパックが存在しない場合は PNSE doc-source の ProjectReference をスキップします。
  • eng/TraversalSdk.AfterTargets.targets: 関連する条件ロジックを調整(詳細は提供情報に含まれていません)。
  • src/libraries/Microsoft.VisualBasic.Core/tests/ErrObjectTests.cs: VB テスト関連の修正(詳細は提供情報に含まれていません)。

パフォーマンスへの影響

影響なし

関連Issue

#127200、#127007、#124365

その他

本修正は #124365 で System.Reflection.Context から <UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile> が削除されたことで、PNSE doc-source パスが初めて有効化されたことに伴う問題です。ローカルテストでは .NETFx、Net11、packages の垂直ビルドでの検証が行われています。


#127199 Fix x86 DAC stack walk regression from Environment.CallEntryPoint skip

概要

x86アーキテクチャにおけるDAC/DBIスタックウォークの回帰問題を修正しました。Environment.CallEntryPointをUnwindStackWalkFrameでスキップすることで、x86の「1フレーム先行アンワインド」が不正なフレームポインタを計算し、ICorDebugStackWalk列挙が失敗する問題を解決します。フレームはデバッガUIからはkRuntimeEntryPointFrame分類とGetFrameWorkerのS_FALSE戻り値により非表示のままです。

変更内容

  • src/coreclr/debug/daccess/dacdbiimplstackwalk.cpp: DacDbiInterfaceImpl::UnwindStackWalkFrameにおいてEnvironment.CallEntryPointのスキップを削除。x86での追加アンワインドが正しいフレームに着地するようにし、フレームが内部列挙に残る理由とデバッガから隠蔽される仕組みをドキュメント化。

パフォーマンスへの影響

影響なし

関連Issue

#127199

その他

この修正はx86アーキテクチャに特有です。x64/ARM64ではGetFrameWorkerがフレームポインタを追加アンワインドなしで直接取得するため、このスキップの継続は無害です。VSの内部テストにて発見されました。


#127194 Add obsolete compatibility shims for moved Microsoft.Extensions.Logging internal types

概要

Microsoft.Extensions.Logging.Abstractions アセンブリにおいて、以前のバージョンで利用可能だった *.Internal 名前空間の型(NullScope、TypeNameHelper、FormattedLogValues、LogValuesFormatter)を [Obsolete(error: true)] + [EditorBrowsable(Never)] の互換性shimとして復元する変更です。これにより、これらの型に依存する既存のコードが TypeLoadException で失敗するシナリオに対応します。新しい非obsoleteなパブリックAPIは追加されません。

変更内容

新規追加ファイル(すべてMicrosoft.Extensions.Logging.Abstractions内):

  • TypeNameHelperObsolete.cs: Microsoft.Extensions.Logging.Abstractions.Internal.TypeNameHelper shim(Microsoft.Extensions.Internal.TypeNameHelper へ転送)
  • NullScopeObsolete.cs: Microsoft.Extensions.Logging.Abstractions.Internal.NullScope shim
  • FormattedLogValuesObsolete.cs: Microsoft.Extensions.Logging.Internal.FormattedLogValues shim(内部実装をラップ)
  • LogValuesFormatterObsolete.cs: Microsoft.Extensions.Logging.Internal.LogValuesFormatter shim(内部実装をラップ)

既存ファイル修正:

  • ref/Microsoft.Extensions.Logging.Abstractions.cs: 新規obsolete shimを参照APIサーフェスに追加
  • ref/Microsoft.Extensions.Logging.Abstractions.csproj: System.Collections ref依存関係を追加

パフォーマンスへの影響

影響なし

関連Issue

#126995 #87480

その他

  • すべてのshim型は [Obsolete(error: true)] でマークされており、コンパイル時にエラーとして扱われます。このため、既存コードの移行を強制しながら、バイナリ互換性を提供する設計です。
  • ファイル命名規約として *Obsolete.cs を採用し、以前の類似PR(#87480)と同じパターンに従っています。

#127192 Remove RSA guard for OSSL

概要

OpenSSLの非推奨RSA APIに対するガード条件を削除し、Linux bionic arm64でのMono ビルド失敗を修正するPRです。CMakeの設定時に非推奨APIをプローブする際の検出ロジックを簡略化し、現在のすべてのOpenSSLバージョンで該当APIが存在することを考慮して、ガード条件を安全に削除しました。

変更内容

  • configure.cmake: RSA APIの弃用検出用コンパイル確認ロジック(check_source_compiles)を削除
  • opensslshim.h: RSA APIのガード関連コードを削除(20行)
  • pal_crypto_config.h.in: 関連する機能フラグ定義を削除(1行)

パフォーマンスへの影響

影響なし

関連Issue

#127154

その他

この変更によりHAVE_OPENSSL_RSA_PRIMITIVE機能フラグの生成ロジックは維持されつつ、ビルド設定時のOpenSSLヘッダ感度を低減し、クロスプラットフォーム(特にLinux bionic arm64)でのビルド互換性が向上します。


#127161 Avoid a duplicate definition of CONTEXT_UNWOUND_TO_CALL if building with the v10.0.28000.0 SDK

概要

Windows SDK v10.0.28000.0以降でCONTEXT_UNWOUND_TO_CALLマクロが定義されるようになったため、CoreCLRのクロスコンパイルヘッダで重複定義エラーが発生していた問題を修正します。ARM64クロスコンパイルセクションでのマクロ定義を#ifndefでガードすることで、既に定義されている場合の重複を回避します。

変更内容

  • src/coreclr/inc/crosscomp.h: ARM64クロスコンパイルセクションにおけるCONTEXT_UNWOUND_TO_CALLマクロの定義を#ifndefプリプロセッサディレクティブでガード(+6/-0)

パフォーマンスへの影響

影響なし

関連Issue

#127161

その他

なし


#127152 Fix dataflow analysis for MakeGenericType/MakeGenericMethod in local methods

  • 作成者: @Copilot
  • 作成日時: 2026年04月20日 12:59:11(UTC)
  • マージ日時: 2026年04月22日 01:15:09(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT の dataflow 解析で、ローカルメソッド内の MakeGenericType/MakeGenericMethod 呼び出しが正しく処理されていない問題を修正します。コンパイラが生成したローカルメソッド内の呼び出しは、親メソッドとは異なる型定義を持つため、ランタイム依存関係が正しくマッチングされていません。

MakeGeneric<Atom>();

// ローカルメソッド内の MakeGenericTypeSite が SearchDynamicDependencies でマッチしない
static object MakeGeneric<T>() => Activator.CreateInstance(typeof(Gen<>).MakeGenericType(typeof(T)));

class Gen<T>;
struct Atom;

変更内容

  • ReflectionMarker.cs: ランタイム依存関係を (MethodDesc OwningMethod, INodeWithRuntimeDeterminedDependencies Dependency) タプルとして格納
  • HandleCallAction.cs: MakeGenericTypeSite/MakeGenericMethodSite に呼び出し元メソッド (_callingMethod) をタグ付け
  • ReflectionMethodBodyScanner.cs: スキャン API を更新して、所有メソッド情報を付与したランタイム依存関係を返す
  • DataflowAnalyzedMethodNode.cs: 動的依存関係マッチングを、親メソッドのみでなく、マークされた各メソッド本体の型定義(コンパイラ生成のローカルメソッド含む)に対して実行
  • Dataflow.cs: 静的ローカルメソッド内の MakeGenericType/MakeGenericMethod をカバーするリグレッションテスト TestMakeGenericDataflowInLocalMethod を追加

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

本修正は NativeAOT コンパイラの内部実装(dataflow 解析エンジン)の改善であり、公開 API の変更はありません。ローカルメソッド内での reflection 処理を含む NativeAOT プロジェクトの正確なトリミング動作が向上します。


#127147 [browser] Remove CoreCLR test exclusions using native relink

概要

Browser + CoreCLRの組み合わせ時にWasmTriggerPublishApp未実装により除外されていた6つのテストプロジェクトを再度有効化します。ビルドエラーが解決されたため、exclusionを削除し、プロジェクトレベルではなくテストレベルでスキップを管理するようにしました。

変更内容

  • tests.proj: Browser/CoreCLR条件での6つのテストプロジェクト除外を削除

    • System.Runtime/System.IO.FileSystem.Tests
    • System.Reflection.MetadataLoadContext.Tests
    • System.Reflection.Metadata.Tests
    • System.Runtime.Loader.Tests
    • System.Diagnostics.StackTrace.Tests
    • System.Runtime/System.Reflection.Tests
  • テスト側の修正:

    • System.Diagnostics.StackTrace.Tests.StackTraceTests.ToString_Async: [ActiveIssue]追加(Browser上の非同期スタックトレース非サポート)
    • System.Runtime.Loader.Tests.CollectibleAssemblyLoadContextTest: [ActiveIssue]追加(Browser上のUnloadテスト非サポート)
    • System.Runtime/System.IO.FileSystem.Tests: 8つのテストを[ConditionalFact]でスキップ(GC finalizerがBrowser-Wasmで確実に実行されないため)

パフォーマンスへの影響

影響なし

関連Issue

その他

  • GitHub Copilotの支援で作成されたPR
  • InvalidCastException_DifferentALC_ShowsAssemblyInfoおよびInvalidCastException_GenericTypeArg_DifferentALC_ShowsAssemblyInfoテストは既にHasAssemblyFilesでゲーティングされており、Browser対応が済んでいるため追加対応不要

#127090 Fix UnreachableBody with only ref to assembly.

概要

ILLinkerのパイプライン実行順序に関するバグを修正しました。到達不可能なメソッド本体内にのみ存在するアセンブリ参照が、SweepStepで保持される一方で参照先アセンブリが削除されるという矛盾が生じていました。CodeRewriterStepをSweepStepよりも前に実行することで、SweepStepが最終的に変換されたメソッド本体を正しく処理するようになりました。

変更内容

  • Driver.cs: リンカーパイプラインの実行順序を変更。CodeRewriterStepをSweepStepより前に配置
  • OnlyReferenceInUnreachableBody.cs: 到達不可能な本体内にのみ存在するアセンブリ参照が正しく削除される回帰テストを追加
  • OtherAssembly2.cs: 新しい回帰テストで使用する依存アセンブリを追加
  • MarkStep.cs: 軽微な変更(2行)
  • UnreachableBodyTests.g.cs: 生成されたアナライザーテストスイートに新しいテストエントリを追加

パフォーマンスへの影響

影響なし。パイプライン実行順序の変更により、削除されるべきアセンブリ参照がより正確に処理されるようになるため、出力の一貫性が向上します。

関連Issue

#127090

その他

この修正は内部実装(ILLinker)に限定された変更であり、公開APIへの影響はありません。


#127081 [mobile] Skip GetMaxCompressedLength test on mobile platforms

概要

モバイルプラットフォーム(Android、iOS、tvOS、MacCatalyst)でのテスト失敗に対応するため、GetMaxCompressedLength_MatchesNativeCompressBoundテストをモバイルプラットフォームでスキップする変更です。モバイル環境では古い zlib が使用され、デスクトップで使用される zlib-ng の圧縮バウンド計算との結果が異なることが原因です。

変更内容

  • System.IO.Compression/tests/DeflateEncoderDecoderTests.cs: GetMaxCompressedLength_MatchesNativeCompressBoundテストにPlatformDetection.IsNotMobile条件を追加し、モバイルプラットフォームでのテスト実行をスキップ
  • System.IO.Compression/src/System/IO/Compression/DeflateEncoder.cs: テスト対象コードの調整

パフォーマンスへの影響

影響なし

関連Issue

#127080、#123145

その他

  • 根本原因: モバイルプラットフォーム(classic zlib)とデスクトップ(zlib-ng)でcompressBound()の計算結果が異なる。例えば入力長0のとき、classic zlibは13を返すが zlib-ng式は11を計算する
  • 実装の正確性: マネージド実装自体は正しく、バッファサイズ計算の用途としても機能するが、このテストはプラットフォーム固有の native zlib との比較のため、モバイルプラットフォームではスキップが適切

#127051 DI: prevent keyed-instance/scoped call-site cache collision during scope validation

概要

Dependency InjectionコンテナのValidateScopes/ValidateOnBuild機能において、キー付きシングルトン(ImplementationInstance)がキーなしのスコープド登録と誤分類される問題を修正しました。登録順序に依存する誤検出(「Cannot consume scoped service ... from singleton ...」)が発生していました。

修正により、ResultCache.None(...)がserviceKeyを保持し、キャッシュキーを(serviceKey, serviceType)のペアから構築するようになり、キー付きとキーなしのコールサイトが同じキャッシュIDを共有しなくなります。

services.AddScoped<IService, ScopedService>();
services.AddKeyedSingleton<IService>("Key", new KeyedSingletonService());
services.AddSingleton<OtherSingleton>();

// ValidateScopes=trueで正しく検証されるようになった
services.BuildServiceProvider(new ServiceProviderOptions
{
    ValidateScopes = true,
    ValidateOnBuild = true
});

変更内容

  • ResultCache.cs: ResultCache.None(...)メソッドを修正し、serviceKeyパラメータを受け付けてServiceCacheKeyの構築に含めるようにしました(serviceTypeのみでなく)
  • ConstantCallSite.cs: ConstantCallSiteがResultCache.None(...)へserviceKeyを渡すように修正しました
  • ServiceProviderValidationTests.cs: キー付きImplementationInstanceのスコープ検証テストを追加。登録順序(scoped-first/keyed-first)の両パターンでBuildServiceProviderがValidateScopes=trueおよびValidateOnBuild=trueで成功することを確認

パフォーマンスへの影響

影響なし

関連Issue

#127051

その他

DI(Dependency Injection)ライブラリの内部実装修正です。キー付きサービスとキーなしサービスのコールサイトキャッシュを分離することで、スコープ検証の精度を向上させています。公開APIへの影響はありません。


#127022 Implement SafeProcessHandle.WaitForExit* methods

概要

SafeProcessHandleに5つの新しい公開メソッドを追加します:WaitForExit、TryWaitForExit、WaitForExitOrKillOnTimeout、WaitForExitAsync、WaitForExitOrKillOnCancellationAsync。これにより、Processを経由せず直接SafeProcessHandleからプロセス終了を待機できるようになります。Windows/Unix双方で実装され、Unixではプロセス終了シグナル情報も報告されるよう拡張されました。

// 使用例
SafeProcessHandle handle = /* ... */;
// 同期待機
if (handle.TryWaitForExit(TimeSpan.FromSeconds(5)))
{
    int exitCode = handle.GetExitCode();
}
// 非同期待機
await handle.WaitForExitAsync();

変更内容

  • SafeProcessHandle: 5つの新しい公開メソッドを実装(共有async処理はRegisterWaitForSingleObject + TaskCompletionSourceベース)
  • Windows実装: ProcessWaitHandle + GetExitCodeProcessを使用した同期待機と終了コード取得
  • Unix実装: ProcessWaitStateとの統合、ref-countedオーナーシップパターンを導入
  • ネイティブPAL: WaitPidExitedNoHangを拡張してシグナル情報を返却(TryConvertSignalCodeToPosixSignal経由)
  • ProcessWaitState: ProcessExitStatus?を単一フィールドとして保持(従来の_exitCode/_terminatingSignalを統合);Holder.IncrementRefCount()追加
  • Process.Unix.cs: GetProcessHandle()とStartCoreでIncrementRefCount()パターン導入
  • 一貫性修正: ProcessIdとGetWaitState()が_waitStateHolderがnullの場合にInvalidOperationExceptionを投げるよう統一(ProcessIdは従来PlatformNotSupportedException)
  • Ref assembly: 新しいAPI表面に対応
  • テスト: 同期/非同期、シグナル報告、タイムアウト/キル動作、非子プロセス処理、Process.SafeHandle相互運用を含む包括的なテスト追加

パフォーマンスへの影響

影響なし

関連Issue

#123380

その他

  • タイムアウト変換ロジックをProcessUtils.ToTimeoutMillisecondsに統一(複数呼び出し箇所を整理)
  • WaitForExitOrKillOnTimeout/WaitForExitOrKillOnCancellationAsyncのみPlatform属性で保護(他のメソッドはクロスプラットフォーム)
  • Copilotレビューにより、PID再利用シナリオでのref-count管理に関する潜在的なリーク懸念が指摘されています(ReleaseRef内のロック処理パターン確認推奨)

#126990 Implement TrimmingDescriptorNode for ILTrim XML descriptor support

概要

ILTrimで未実装だった-x(XMLディスクリプタ)コマンドラインオプションを実装しました。ILCompiler.CompilerのTrimmingDescriptorNodeを再利用し、ILTrim環境用に条件付きコンパイルで適応させています。これにより、XML形式のトリミング設定ファイルがILTrimで処理されるようになります。

変更内容

  • Driver.cs (illink): #if ILTRIM下でTrimmingDescriptorNodeのusing aliasを追加し、従来のno-op処理をinputs.Add(new TrimmingDescriptorNode(xmlFile))に置き換え
  • TrimmingDescriptorNode.cs: #if ILTRIMガード下でfactory.Logger/factory.Settings.FeatureSettingsを使用するよう適応;ICompilationRootProviderを#if !ILTRIMでガード(ILTrimでは利用不可)
  • ILTrim.Core.csproj: TrimmingDescriptorNode.csをリンク済みコンパイル項目として追加
  • ILTrimExpectedFailures.txt: 23個の合格テスト(主にLinkXml.*およびInheritance.Interfaces.*の一部)を削除;1個の新規失敗予想を追加(LinkXml.UnusedNonRequiredTypeIsRemoved — NativeAOTのDescriptorMarkerセマンティクスがrequired="0"を尊重しない動作を継承)

パフォーマンスへの影響

影響なし

関連Issue

#126990

その他

テスト結果:失敗0件、合格308件(従来285件から増加)、スキップ604件。破壊的変更なし。ILTrimとNativeAOTのDescriptorMarker実装の差異により、1つのテストが期待通りの失敗として記録されています。


#126804 Use source-build-assets repo

概要

source-build-reference-packagesリポジトリがsource-build-assetsにリネームされたため、VMR/source-buildシナリオでの参照を更新しました。これに伴い、新しいリポジトリから生成されたパッケージバージョンも更新されています。

変更内容

  • eng/Version.Details.xml: XML宣言ヘッダーを追加し、source-build中間依存関係をsource-build-reference-packagesからsource-build-assetsに更新(リポジトリURL、SHA、パッケージバージョンを変更)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはソースビルドインフラストラクチャの保守更新です。VMR(Virtual Monolithic Repository)とsource-buildフローでの依存関係追跡が継続的に機能することを確認しています。


#126331 [release/10.0] Improve UnwindInfoTable's performance

概要

Windows x64プラットフォームにおけるアンワインド情報テーブル(UnwindInfoTable)のパフォーマンスを改善するバックポート。エントリをバッファに蓄積してから一括フラッシュすることで、pRtlAddGrowableFunctionTableとpRtlDeleteGrowableFunctionTableの操作コストを償却し、内部のRUNTIME_FUNCTIONテーブル作成のオーバーヘッドを削減します。

変更内容

  • codeman.h/cpp: UnwindInfoTableに保留中のエントリ用バッファとFlushPendingEntries()メソッドを追加。単一のアンワインド情報ロックをパブリッシュ用と保留バッファ用の2つに分割し、ロック競合を削減。
  • CrstTypes.def: 従来の単一アンワインド情報CRSTを、新たなパブリッシュ用/保留バッファ用CRSTに置き換え。
  • crsttypes_generated.h: CRST列挙型、名前マッピング、ロックレベルマップを再生成。

パフォーマンスへの影響

実行時間が約50%削減されることが確認されています。バッファリングと一括フラッシュによる償却処理により、Windows x64でのRUNTIME_FUNCTIONテーブル操作のコストが大幅に低減します。

関連Issue

#123124、#125545

その他

  • リスク評価: 中程度。変更はx64 Windowsプログラムに影響し、実装は非自明です。
  • テスト状況: CI全体のテストが合格。回帰テストで性能改善が確認済み。
  • 互換性: 破壊的変更はありません(内部実装の最適化)。

#126279 fix import of SPN with Kerberos realm

  • 作成者: @wfurt
  • 作成日時: 2026年03月29日 17:48:01(UTC)
  • マージ日時: 2026年04月22日 16:50:12(UTC)
  • ラベル: area-System.Net.Security

概要

Kerberos認証フローをテストするため、NegotiateAuthenticationのEnterpriseテストスイートを追加します。実際のKDC(Key Distribution Center)に対してクライアント/サーバー間の認証ハンドシェイク、保護レベル、wrap/unwrapシナリオをテストする新しいテストケースを実装しています。

変更内容

  • NegotiateAuthenticationTest.cs(+377行): Enterprise環境でKDC対して実行するNegotiateAuthentication のテストケースを新規追加。クライアント単体テストおよびクライアント/サーバーのハンドシェイクテストを含む。
  • System.Net.Security.Enterprise.Tests.csproj(+1行): 新しいテストファイルをプロジェクトに登録。
  • pal_gssapi.c(+13行): GSSAPI関連の機能追加(詳細は提供情報から不明)。

パフォーマンスへの影響

影響なし。テスト追加のため、実行時パフォーマンスへの影響はありません。

関連Issue

#126979

その他

このPRは、System.Net.Securityライブラリのエンタープライズレベルのテストカバレッジを拡大し、実際のKerberos/Negotiate認証フローに対する検証を強化するものです。


#126247 [Release/10.0] Pass down DJI and MethodDesc to avoid unnecessary PtrHashMap lookup

概要

ReadyToRun対応アプリケーションをデバッグ時にデバッガハングを引き起こす問題を修正します。DebuggerController::BindPatchでGetCodeRegionInfoを呼び出す際に、既に利用可能なDebuggerJitInfoとMethodDescを渡すことで、不要なHashMap::LookupValueルックアップと連鎖的なGCモード遷移を回避し、キャッシュされたCodeRegionInfoをそのまま利用できます。

変更内容

  • src/coreclr/debug/ee/controller.cpp: BindPatch関数内でGetCodeRegionInfo(NULL, NULL, startAddr)の呼び出しをGetCodeRegionInfo(info, pMD, startAddr)に変更(1行修正)

パフォーマンスへの影響

改善あり。キャッシュされたCodeRegionInfoがある場合、EECodeInfoオブジェクトの不要な構築とそれに伴うHashMap::LookupValueルックアップが回避されます。DebuggerController ロック保持下での共有状態へのアクセス削減により、GC協調モード遷移時の競合リスクも軽減されます。

関連Issue

#126096 (対応する修正: #123651, #123492)

その他

  • リスク評価: 非常に低い。既に計算済みのローカル変数を既存の関数に渡すのみで、controller.cpp内の他のGetCodeRegionInfo呼び出しサイト(行番号~6173、~6219、~8054)と同じパターンに統一しています
  • 顧客影響: ReadyToRun デバッグ時にDebuggerController ロック保持下でのHashMap::LookupValue経由のGC協調モード遷移によるデバッガハングを防止。スレッド停止・GC処理待機のデッドロック回避により、デバッガとIDE のハング現象を解消します
  • リグレッション: なし。根本原因はReadyToRun サポート追加時から存在していましたが、本修正によって妥当なアプローチで対処されています

#126140 Scope installer helix tests to installer changes (keep osx_arm64 for coreclr)

概要

Installer Helix テストの実行条件をスコープ化し、インストーラー関連のパス変更時のみ実行するように変更しました。以前は CoreCLR および Libraries PR で毎回 5 つの Helix ジョブが実行されていましたが、インストーラーテストは JIT・GC・ライブラリコード変更の影響を受けないため、不要な実行を削減します。例外として osx_arm64 は coreclr.containsChange も含める条件を保持し、シングルファイル関連の問題検出を強化します。

変更内容

  • eng/pipelines/runtime.yml: Installer_Build_And_Test ブロックを 2 つに分割
    • Block 1 (windows_x86, osx_x64, windows_x64, linux_x64): トリガー条件を non_mono_and_wasm.containsChange から installer.containsChange に変更
    • Block 2 (osx_arm64): トリガー条件を coreclr.containsChange OR installer.containsChange OR ローリングビルドに設定
    • 既存の installer パスサブセット(src/installer/、src/native/corehost/、eng/ インフラなど)を活用

パフォーマンスへの影響

ビルドパイプラインの効率化(CI リソース削減):

  • CoreCLR のみの PR: 5 → 1 ジョブ(4 ジョブ削減)
  • Libraries のみの PR: 5 → 0 ジョブ(5 ジョブ削減)
  • インストーラー変更時: 5 ジョブ(変更なし)
  • ローリング/CI ビルド: 5 ジョブ(変更なし)

関連Issue

なし

その他

このPRは GitHub Copilot の支援で生成されました。パイプライン設定の変更であり、ランタイム動作への影響はありません。


#125637 [release/10.0] Do not store result of cast in IDynIntfCastable scenarios

概要

.NET 9.0でIDynamicInterfaceCastableを使用したキャスト処理におけるキャッシング関連の回帰バグを修正します。不正なキャッシュ結果が返される問題を解決し、型チェックが異なる結果を返すべき場合でも正しく処理されるようにします。

変更内容

  • src/coreclr/nativeaot/Runtime.Base/src/System/Runtime/TypeCast.cs: IDynamicInterfaceCastableのキャッシング条件にチェック処理を追加し、キャッシュ結果を保存する際の条件を修正
  • src/tests/nativeaot/SmokeTests/UnitTests/Interfaces.cs: キャッシュシナリオを明示的に検証する新しいテストケースを追加(27行)

パフォーマンスへの影響

影響なし。キャッシング条件の最適化であり、パフォーマンスへの悪影響はありません。

関連Issue

#125605、#125577、#108328

その他

  • このPRは#125605のrelease/10.0ブランチへのバックポートです
  • .NET 9.0の#108328で回帰が導入されました
  • Windows チームが影響を受けており、CsWinRT 3.0での使用で問題となる予定です
  • 修正の範囲はバグシナリオに限定されており、リスク評価は低です

目次