Pull Request on 2026年02月20日

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

注意点

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



#124657 [cDAC] UEWatsonBucketTrackerBuckets is not available on non-windows platforms

  • 作成者: @max-charlamb
  • 作成日時: 2026年02月20日 16:23:06(UTC)
  • マージ日時: 2026年02月20日 20:25:44(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC フレームワークでのプラットフォーム互換性の問題を修正しました。UEWatsonBucketTrackerBuckets データディスクリプタは Windows プラットフォームのみで利用可能であるため、非 Windows プラットフォームでスレッドデータを読み込む際のクラッシュを防止します。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/Thread.cs
    • UEWatsonBucketTrackerBuckets フィールドへのアクセスを TryGetValue パターンに変更
    • 既存の TEB フィールドで使用されているパターンと統一

パフォーマンスへの影響

影響なし (条件付きアクセスの追加のため実行時オーバーヘッドはわずかですが、測定可能なレベルではありません)

関連Issue

なし

その他

  • cDAC ダンプテスト フレームワーク構築時に発見された問題
  • 非 Windows プラットフォーム(Linux、macOS など)での環境では、Watson バケットトラッカー機能が存在しないため、フィールドの存在確認が必要
  • TEB フィールドと同様の TryGetValue パターンを適用することで、既存のコード慣行と一貫性を保ちながら問題を解決

#124653 renames to IsMultithreadingSupported

  • 作成者: @pavelsavara
  • 作成日時: 2026年02月20日 16:00:32(UTC)
  • マージ日時: 2026年02月20日 21:29:34(UTC)
  • ラベル: area-System.Threading

概要

このPRは、後続のAPI変更(#124603)に向けた準備作業として、内部およびテスト関連のプロパティ/メソッドの大規模な名前変更を実施しています。「Threading」を「Multithreading」に、「SingleThreaded」を「MultithreadingSupported」に変更し、論理を反転させています。

// 変更例
// Before
if (Thread.IsSingleThreaded) { ... }
Thread.ThrowIfSingleThreaded();

// After
if (!Thread.IsMultithreadingSupported) { ... }
Thread.ThrowIfMultithreadingIsNotSupported();

変更内容

  • テストユーティリティ: PlatformDetection.IsThreadingSupportedIsMultithreadingSupportedIsThreadingNotSupportedIsNotMultithreadingSupported に変更
  • スレッドライブラリ: Thread.IsSingleThreadedThread.IsMultithreadingSupportedThread.ThrowIfSingleThreaded()Thread.ThrowIfMultithreadingIsNotSupported() に変更(論理反転)
  • テストファイル: 280以上のテストファイルでConditionalFactConditionalTheory属性とコメントを更新
  • 実装ファイル: SpinWait、Parallel、TaskReplicator、Stream、TextWriter等の条件チェックを新しい命名に対応

パフォーマンスへの影響

影響なし。これは純粋な名前変更/リファクタリングで、実行時の動作に変更はありません。

関連Issue

  • #124603(このPRの準備作業)

その他

  • Copilot reviewerが280/281ファイルをレビューして問題なしと判定
  • 破壊的変更ではなく、API準備のための内部名前変更
  • WebAssemblyスレッド関連ドキュメント(threads.md)も更新対象に含まれている

#124627 Remove unused PInvokeTransitionFrame_MAX_SIZE and PInvokeTransitionFrame_SaveRegs_count macros

  • 作成者: @Copilot
  • 作成日時: 2026年02月20日 04:28:31(UTC)
  • マージ日時: 2026年02月20日 07:01:18(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT ランタイムのバインダーヘッダ (rhbinder.h) から未使用のマクロを削除するクリーンアップです。PInvokeTransitionFrame_MAX_SIZE マクロとそれに依存する PInvokeTransitionFrame_SaveRegs_count マクロ(AMD64/x86/ARM用の条件付き定義)がリポジトリ内で参照されていないため、12行のデッドコードを削除します。

変更内容

ファイル: src/coreclr/nativeaot/Runtime/inc/rhbinder.h

  • PInvokeTransitionFrame_SaveRegs_count マクロを削除(TARGET_AMD64=9、TARGET_X86=6、TARGET_ARM=9の3つのプラットフォーム条件付き定義)
  • PInvokeTransitionFrame_MAX_SIZE マクロを削除(上記に依存していた)

パフォーマンスへの影響

影響なし。これはヘッダファイル内の未使用マクロ定義の削除のため、コンパイル時間にもランタイム性能にも影響はありません。

関連Issue

なし

その他

  • このマクロは条件付きで3つのプラットフォーム(AMD64、x86、ARM)に対してのみ定義されていましたが、リポジトリ内のどこからも参照されていないことが確認されています
  • NativeAOT ランタイムの保守性向上を目的とした、プラットフォーム固有の ABI 関連の未使用定数の削除です
  • Copilot コーディングエージェントで作成されたPRです

#124622 [r2r] Fix verbose logging

  • 作成者: @BrzVlad
  • 作成日時: 2026年02月19日 21:02:07(UTC)
  • マージ日時: 2026年02月20日 10:27:15(UTC)
  • ラベル: area-ReadyToRun-coreclr

概要

ReadyToRun (R2R) コンパイルで --verbose オプション使用時の進捗ログ機能に存在した不具合を修正しました。ProgressReporter のインクリメント計算によって、処理対象が小さい場合にゼロ除算クラッシュが発生したり、100%を超える進捗率が出力される問題を解決しています。

変更内容

src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs

  • 進捗計算ロジックを "increment/modulo" 方式から "step-based" 方式に変更
  • _increment == 0 によるゼロ除算を回避
  • 現在のステップ(current/total)が新たな閾値に到達した時のみログを進める仕組みに改善
  • 100%を超える進捗率出力の防止

パフォーマンスへの影響

影響なし。ログ出力の計算方式変更であり、R2R コンパイル処理自体のパフォーマンスに直接的な影響はありません。

関連Issue

#124622

その他

この問題は特に小規模なアセンブリを含むコンポジット R2R ビルド時に顕著でした。修正により、アセンブリサイズに関わらず安定した進捗ログが得られるようになります。


#124616 Update OneCollect.RecordTrace to 0.1.33304 and re-enable UserEvents NativeAOT tests

  • 作成者: @Copilot
  • 作成日時: 2026年02月19日 19:40:36(UTC)
  • マージ日時: 2026年02月20日 20:18:57(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

Microsoft.OneCollect.RecordTrace パッケージを 0.1.33304 にアップデートし、perfmaps のない .NET プロセスを検出できるようになったため、NativeAOT での UserEvents トレーシングテストを再有効化します。これにより、#123697 のチェックリストが完了します。

変更内容

  • eng/Versions.props: MicrosoftOneCollectRecordTraceVersion0.1.322210.1.33304 にバージョンアップ
  • src/tests/tracing/userevents/Directory.Build.props: NativeAotIncompatible マーク削除(#123697 対応)。CLRTestTargetUnsupported は継続維持(テストの flakiness 対策)

パフォーマンスへの影響

影響なし。本変更は依存パッケージの更新とテストゲーティング設定の調整であり、ランタイムのパフォーマンスには直接影響しません。

関連Issue

  • #123697(NativeAOT UserEvents テスト対応チェックリスト)
  • #123442(CLRTestTargetUnsupported ゲーティング)
  • microsoft/one-collect#229(perfmap 検出機能追加)

その他

NativeAOT UserEvents テストは依然として flakiness の問題があるため、CLRTestTargetUnsupported ゲーティングは維持されています。ただし、更新されたパッケージでの /azp run runtime-nativeaot-outerloop パイプラインでは、テストが正常に成功することが検証済みです。


#124606 [browser] move loader JS code

  • 作成者: @pavelsavara
  • 作成日時: 2026年02月19日 17:17:34(UTC)
  • マージ日時: 2026年02月20日 13:42:34(UTC)
  • ラベル: arch-wasm area-Host os-browser

概要

ブラウザホスト用のローダー JavaScript/TypeScript コードを src/native/libs/Common/JavaScript 配下に統合し、複数のランタイムフレーバー(CoreCLR、Mono など)での再利用を可能にする準備を実施。MSBuild → CMake → Rollup パイプラインに RuntimeFlavor 情報を伝播させ、フレーバー別のバンドル処理に対応。

変更内容

ビルドシステム更新:

  • src/native/rollup.config.js:Rollup 入力パスを新しい libs/Common/JavaScript ロケーションに変更
  • src/native/rollup.config.defines.jsruntimeFlavor 環境変数の定義とログ出力を追加
  • src/native/libs/Common/JavaScript/CMakeLists.txt:TS ソース一覧を新ロケーションに更新し、ランタイムフレーバーを Rollup に渡すように修正
  • eng/native.wasm.targets:MSBuild から -DCMAKE_BUILD_RUNTIME_FLAVOR フラグを CMake に伝播
  • src/native/package.json:npm scripts を更新して RuntimeFlavor を渡すように変更

ローダーモジュール再配置:

  • ローダー関連 TS ファイル(dotnet.tsbootstrap.tsconfig.tsexit.tshost-builder.tsindex.ts など)を src/native/libs/Common/JavaScript/loader/ に統合
  • ホスト関連ファイル(host.tsassets.ts など)を src/native/libs/Common/JavaScript/host/ に統合
  • 各モジュール内の相対インポートパスを新しいディレクトリ構造に対応

型定義とメタデータ:

  • 生成された dotnet.d.ts の出力パスを新ロケーションに変更
  • .gitattributes.eslintignore を新ロケーション対応に更新

パフォーマンスへの影響

影響なし。本変更はコード再配置とビルドパイプラインの更新であり、実行時の動作やパフォーマンス特性に変化なし。バンドルサイズやメモリ使用量は不変。

関連Issue

なし(記載された関連 Issue なし。Mono への準備段階という背景情報のみ)

その他

  • 互換性: 本変更は内部実装の再構成であり、公開 API の変更なし。外部ユーザーへの影響なし。
  • リファクタリングの狙い: CoreCLR と Mono 間での JavaScript/TypeScript コード共有基盤を確立し、今後の WASM ランタイムサポート拡張に備える構造化を実現。
  • ビルドシステム拡張: RuntimeFlavor パラメータの導入により、将来的に CoreCLR/Mono などのランタイム別に異なるバンドル構成を生成可能に。

#124605 Fix abandoned jit regression tests

  • 作成者: @EgorBo
  • 作成日時: 2026年02月19日 16:39:56(UTC)
  • マージ日時: 2026年02月20日 21:25:07(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT回帰テストの登録モデルの変更に伴い、テストファイルをプロジェクトファイル(csproj)に明示的に登録する必要が生じました。グローブパターンでの自動包含ではなく、明示的な登録が必要な新しいモデルに対応しています。

変更内容

  • src/tests/JIT/Regression/Regression_ro_2.csproj: 放棄されたJIT回帰テストをプロジェクトファイルに明示的に登録(+6行)
  • .github/skills/jit-regression-test/SKILL.md: スキルドキュメントを調整(+4/-3行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは新しいテスト登録モデルへの移行に伴う修正です。以前のグローブパターンを使用した自動包含方式から、csprojファイルでの明示的な登録方式へ変更された際の調整となります。


#124600 Publish AOT managed-ilasm and include in Core_Root

  • 作成者: @am11
  • 作成日時: 2026年02月19日 14:47:42(UTC)
  • マージ日時: 2026年02月20日 04:29:28(UTC)
  • ラベル: area-ILTools-coreclr community-contribution

概要

AOT(Ahead-of-Time)コンパイルされたマネージド ilasm ツールの公開と Core_Root への統合を行う変更です。ilasm.csproj の設定を更新し、ビルド時に AOT 版の ilasm が生成・配置されるようにしました。ラウンドトリップテストでの使用は今後の予定とのことです。

変更内容

  • ilasm.csproj (+15/-1):AOT コンパイル設定の追加、PublishAot の有効化
  • src/tools/Directory.Build.targets (+11/-0):ilasm の AOT ビルド出力処理の追加
  • src/tests/Common/Directory.Build.targets (+5/-0):テスト環境での ilasm 配置設定
  • eng/Subsets.props (+1/-1):ビルドサブセット定義の更新
  • src/coreclr/Directory.Build.props (+1/-1):ビルドパス定義の微調整
  • Directory.Build.props (+1/-0):最上位レベルの設定追加

パフォーマンスへの影響

改善が期待される点:

  • AOT コンパイルにより、ilasm の起動時間が短縮される(JIT コンパイルのオーバーヘッド削減)
  • メモリフットプリントの削減が見込まれる

懸念点:

  • ビルド時間にAOT コンパイル時間が追加される
  • 具体的なベンチマーク数値が不明確

関連Issue

なし

その他

  • ラウンドトリップテストでの実使用はまだ実装されていない段階
  • Core_Root への統合により、ランタイムテストスイート全体で AOT 版 ilasm を利用可能に

#124582 Write ExpectedExitCode marker in GenerateMarkerFiles

  • 作成者: @Copilot
  • 作成日時: 2026年02月19日 00:59:10(UTC)
  • マージ日時: 2026年02月20日 22:36:07(UTC)
  • ラベル: area-CodeGen-coreclr

概要

GenerateMarkerFilesタスクがExpectedExitCode.txtマーカーを出力していなかった問題を修正します。マージされたテストまたはスタンドアロンテストペイロードで、期待される終了コードが確実に含まれるようになります。既存のマーカーパイプラインに3行のエントリを追加するシンプルな修正です。

変更内容

  • src/tests/Directory.Build.targets: GenerateMarkerFilesExpectedExitCode.txtマーカーエントリを追加
    • $(IntermediateOutputPath)\ExpectedExitCode.txtをマーカーファイルに含める
    • $(ExpectedExitCode)値をファイル内容として書き込み
    • 条件付き適用: ExpectedExitCodeが設定され、かつマージテストランナーまたはスタンドアロンビルドで、CLRTestKindSharedLibraryではない場合のみ

パフォーマンスへの影響

影響なし。マーカーファイル生成パイプラインは既存の処理を再利用し、追加の処理オーバーヘッドはありません。

関連Issue

PR説明に記載なし

その他

  • 変更内容がCopilot自動作成であり、レビュアーが確認済み
  • マーカーファイル生成は既存パイプラインWriteLinesToFileを活用
  • SharedLibraryテストは意図的に除外されている

#124579 Fix P/Invoke IL stub race in DoPrestub

  • 作成者: @AaronRobinsonMSFT
  • 作成日時: 2026年02月19日 00:23:47(UTC)
  • マージ日時: 2026年02月20日 18:34:22(UTC)
  • ラベル: area-Interop-coreclr

概要

P/Invoke IL スタブ生成時に複数スレッドが競合して重複した IL スタブを独立生成する問題を修正しました。ILStubCache の参照を再度有効化し、同一ターゲットメソッドに対して複数スレッドが異なる PCODE 値を生成する競合状態を防止します。

変更内容

  • dllimport.cpp: IsSharedStubScenario でforward P/Invoke を除外していた条件を削除し、ILStubCache の参照を再度有効化。CreateHashBlob で forward P/Invoke スタブ用に最小限のハッシュブロブ(ターゲット MethodDesc ポインタのみ)を生成。

  • CrstTypes.def, crsttypes_generated.h: Crist(Critical Section Type)定義の最小限の更新。

パフォーマンスへの影響

改善。重複した IL スタブの JIT コンパイルが回避されるため、不要な CPU リソース消費とメモリ割り当てが削減されます。同一 P/Invoke メソッドへの複数スレッドアクセスでは、キャッシュヒットにより JIT コンパイルが1回のみとなります。

関連Issue

#124530(修正対象)、#117901(根本原因となった前の変更)

その他

PR #117901 で IsSharedStubScenario が forward P/Invoke に対して false を返すよう変更されたことが原因。複数スレッドが同時に異なる DynamicMethodDesc を生成・JIT してから DoPrestub のアサーション失敗が発生していました。本修正でスレッド間の ILStubCache 共有によりデデュプリケーションが機能します。


#124549 [r2r] Don't skip methods with AggressiveOptimization attribute on ios

  • 作成者: @BrzVlad
  • 作成日時: 2026年02月18日 13:05:18(UTC)
  • マージ日時: 2026年02月20日 06:58:48(UTC)
  • ラベル: area-ReadyToRun-coreclr

概要

iOS環境でのパフォーマンス問題を修正するPRです。AggressiveOptimization属性を持つメソッドは、JIT(実行時コンパイル)が利用可能なプラットフォームではR2R(ReadyToRun)コンパイルをスキップして、実行時にJITでより最適化されたコードを生成させるべきです。しかしiOSではJITが無効化されているため、スキップすることで解釈実行となり、むしろパフォーマンスが悪化していました。本PRでは、JITが利用可能なプラットフォームでのみスキップするよう条件を修正します。

変更内容

  • CorInfoImpl.ReadyToRun.cs (+3/-3)
    • AggressiveOptimization属性を持つメソッドのR2Rスキップロジックを修正
    • TargetAllowsRuntimeCodeGenerationをローカル変数に抽出し、コード再利用と効率化を実現
    • JITが利用可能なプラットフォームでのみメソッドをスキップする条件を追加

パフォーマンスへの影響

改善点:iOS環境での顕著な性能向上

  • iOS上でAggressiveOptimization属性を持つメソッドがR2Rコンパイルされることで、解釈実行から事前コンパイル済みコード実行に変更
  • 解釈実行の「terrible perf」(深刻なパフォーマンス低下)から脱却
  • JIT対応プラットフォーム(Windows、Linux等)では既存の最適化動作を維持

関連Issue

なし

その他

  • この修正はiOSのような制限付きプラットフォーム固有の問題に対応
  • TargetAllowsRuntimeCodeGenerationの条件判定を統一することで、将来的な同様の問題発生を防止
  • 変更は最小限(+3/-3)で、既存機能への影響を最小化

#124480 Fix FromBase64Transform.TransformFinalBlock to consistently reset state

  • 作成者: @Copilot
  • 作成日時: 2026年02月16日 21:18:41(UTC)
  • マージ日時: 2026年02月20日 04:00:01(UTC)
  • ラベル: area-System.Security

概要

FromBase64Transform.TransformFinalBlockが空の入力(inputCount == 0)で呼ばれた場合、内部バッファ状態をリセットせず、_inputIndexに古いデータが残る問題を修正。部分ブロック処理時は正しくリセットされていたが、空入力時の早期リターンではリセット処理が欠けていたため、後続の変換操作が失敗する原因となっていました。

修正内容:

  • Line 192の早期リターン前にReset()呼び出しを追加
  • 空(0バイト)と部分(1バイト)ファイナルブロック両シナリオをカバーする回帰テストを追加
using FromBase64Transform transform = new();
byte[] partialBlock = [(byte)'A'];

transform.TransformBlock(partialBlock, 0, 1, destination, 0);
transform.TransformFinalBlock(Array.Empty<byte>(), 0, 0);  // 修正前は状態がリセットされない

// 後続の操作が失敗していた
transform.TransformFinalBlock(completeBlock, 0, completeBlock.Length);

変更内容

  • Base64Transforms.cs: TransformFinalBlockメソッド内のinputCount == 0分岐でのみReset()呼び出しが欠けていた箇所を修正(+1行)
  • Base64TransformsTests.cs: TransformFinalBlock_ShouldResetStateConsistentlyテスト追加。空ブロックと1バイト部分ブロックの両ケースで状態一貫性を検証(+31行)

パフォーマンスへの影響

影響なし。修正は条件分岐内のリセット処理追加のため、性能特性に変化なし。

関連Issue

#122809(FromBase64Transform.TransformFinalBlockが不一貫に状態をクリアする問題)

その他

  • すべての62個のBase64Transformテストがパス
  • 破壊的変更なし。修正前の空入力処理は未仕様で、テストが存在しなかった
  • 同一FromBase64Transformインスタンスの再利用時の状態管理バグを修正するため、暗黙的な動作改善となります

#124307 Replace HashMap COOP transitions with Epoch-Based Reclamation (EBR)

  • 作成者: @AaronRobinsonMSFT
  • 作成日時: 2026年02月12日 00:56:45(UTC)
  • マージ日時: 2026年02月20日 18:20:37(UTC)
  • ラベル: area-VM-coreclr

概要

このPRは、CoreCLRランタイムのHashMapにEpoch-Based Reclamation (EBR)メカニズムを導入します。EBRにより、GC一時停止やCOOP遷移を不要とした低オーバーヘッドの安全な遅延削除が可能になり、非同期シナリオでのパフォーマンスと安全性が向上します。

// EBR有効化により、COOP遷移が不要に
// 従来: GC安全性のため COOP遷移が必要
// 新規: EBRがメモリ管理を保証

変更内容

  • EBR実装: ebr.h/ebr.cpp追加。EbrCollectorクラスで臨界領域、遅延削除、エポック管理を実装(589行)
  • Crstロック: CrstEbrPendingCrstEbrThreadListをロック型に追加。葉ロックで、HashMap操作やGC遷移をまたがない設計
  • HashMap統合: 新しいヘルパー関数(AllocateBucketsFreeBucketsDeleteObsoleteBuckets)でバケット管理を再構成。EBR臨界領域でAsync操作を保護
  • ファイナライザ統合: finalizer threadがEBRクリーンアップをトリガー
  • 古い実装削除: syncclean.cppの対応するCOOP遷移コード(32行削除)
  • ビルド更新: CMakeLists.txtにebr.cppを追加、初期化をceemain.cppで実施

パフォーマンスへの影響

改善点

  • GC一時停止(STW)不要となり、特にAsync/マルチスレッドシナリオでレイテンシ削減
  • COOP遷移オーバーヘッド(毎回のモード切替)を廃止
  • EBRのエポックベース管理により、効率的なメモリ回収タイミングを実現

懸念点なし - EBRは設計上、既存より低オーバーヘッド。ただしEpoch進行に依存するため、不活性スレッドがあるとクリーンアップ遅延の可能性

関連Issue

なし(PR#123492を置き換え)

その他

  • 破壊的変更なし - 内部実装変更で、公開APIに影響なし
  • セキュリティ配慮: CrstEbrThreadListは葉ロックで、デッドロック/GC遷移中の不整合を防止設計
  • 複数レビュアー(noahfalk、jkotas等)による厳密な審査完了

#123780 Move diagnostic generation from LibraryImportGenerator to LibraryImportDiagnosticsAnalyzer

  • 作成者: @Copilot
  • 作成日時: 2026年01月29日 22:59:01(UTC)
  • マージ日時: 2026年02月20日 19:52:36(UTC)
  • ラベル: area-System.Runtime.InteropServices

概要

このPRは、.NETのLibraryImportGenerator(P/Invoke相互運用性用のソースジェネレータ)における診断生成の責務を分離しています。従来はLibraryImportGeneratorが診断を直接発行していましたが、新たにLibraryImportDiagnosticsAnalyzerを作成し、診断報告を専用アナライザーに移譲することで、Rosynチームの推奨に従った設計改善を実現しています。これにより診断のみをテストする場合の実行速度向上と、コード生成とは独立した診断検証が可能になります。

変更内容

新規作成:

  • LibraryImportDiagnosticsAnalyzer.cs (+300行): 診断ロジックを独立して実行するアナライザー。SymbolEqualityComparerを使用して属性型を比較し、スレッドセーフなフラグ管理にInterlocked/Volatileを採用

主要な削除・修正:

  • LibraryImportGenerator.cs: 診断報告パイプラインを削除、アナライザーの検証メソッドを直接呼び出すように変更
  • Comparers.cs: 不要な静的ラッパークラスを削除
  • CompilationExtensions.cs: DisableRuntimeMarshallingAttributeの検査対象をモジュールからアセンブリに修正(属性の定義に合わせて調整)
  • テスト基盤: CSharpSourceGeneratorVerifierTAnalyzer型パラメータを追加、診断テストと生成テストを分離

パフォーマンスへの影響

改善点:

  • アナライザーは生成パイプラインから独立実行可能となるため、診断のみを検証するテストの実行速度が向上
  • DiagnosticOrパイプラインの削除により、ジェネレータの処理フロー簡素化

懸念点: なし(変更はリファクタリングで、既存の診断ロジックは完全に移譲されており、実行時パフォーマンスへの影響なし)

テスト結果:

  • LibraryImportGenerator.Unit.Tests: 702/703パス(1スキップ)
  • ComInterfaceGenerator.Unit.Tests: 839/839パス

関連Issue

なし

その他

設計ハイライト:

  1. スレッドセーフ実装: EnableConcurrentExecution()に対応し、foundLibraryImportMethodフラグをInterlocked.ExchangeVolatile.Readで管理
  2. テスト最適化: 診断専用テストはアナライザーのみ実行、コード生成テストはジェネレータ+アナライザー両方を実行することで、テスト目的に応じた効率的な検証を実現
  3. 診断除外の精密化: アナライザー単独テストではCS8795とCS0751のみを除外(従来はすべてのコンパイラ診断を除外)し、テストコードのタイプミス検出を維持

#123033 [clr-ios] Run full test suite on Apple mobile platforms

  • 作成者: @kotlarmilos
  • 作成日時: 2026年01月09日 13:54:47(UTC)
  • マージ日時: 2026年02月20日 13:59:32(UTC)
  • ラベル: os-ios area-CodeGen-Interpreter-coreclr

概要

Apple モバイルプラットフォーム(iOS、iPadOS、macOS Catalyst)での .NET ランタイムおよびライブラリテストの完全実行を有効化します。193個のライブラリプロジェクトと74個のランタイムテストプロジェクトを対象に、テストスイートを拡充しました。互換性の問題がある34個の個別テストと22個のライブラリテストプロジェクトは一時的に無効化され、追跡用 Issue #124344 で管理されます。

変更内容

  • CI/CD パイプライン設定 (runtime-extra-platforms-*.yml, runtime.yml)

    • iOS、iOS Simulator、macOS Catalyst 向けのテスト実行構成を更新
  • テスト基盤ターゲット (tests.*.targets)

    • モバイルプラットフォーム向けのテストビルド設定を拡張
  • テストスキップアノテーション

    • 複数のライブラリテストに [SkipOnPlatform] 属性を追加
    • 対象ファイル: System.Extensions., System.Reflection., System.Runtime.* など 34 テスト

パフォーマンスへの影響

影響なし。本変更はテスト実行基盤の拡充であり、ランタイムやライブラリの実行時パフォーマンスへの直接的な影響はありません。ただし CI/CD パイプラインのテスト実行時間は増加します。

関連 Issue

  • Fixes: #120055
  • Tracking Issue: #124344(無効化されたテストの追跡)

その他

無効化されたテストは Apple モバイルプラットフォームの制限事項(例:ファイルシステムアクセス、リフレクション機能の限定化など)が原因と考えられます。後続の改善作業により段階的に対応予定です。


#119109 Add host tests for resolving serviceable assets

  • 作成者: @elinor-fung
  • 作成日時: 2025年08月26日 18:28:03(UTC)
  • マージ日時: 2026年02月20日 19:08:40(UTC)
  • ラベル: test-enhancement area-Host

概要

.NET Runtimeのホストがサービス可能なアセット(serviceable assets)を正しく解決するかを検証するテストを追加しました。このテストは、.deps.jsonの相対ローカルパス機能の実装時に、サービス可能なアセットの動作を検証することで、将来の変更による回帰を防ぎます。

変更内容

  • ServiceableAssets.cs(新規作成、189行)

    • ランタイムアセンブリ、ネイティブライブラリ、リソースアセンブリの3つのテストケースを追加
    • サービス可能なアセットがサービス提供ディレクトリから解決され、サービス不可能なアセットがアプリケーションディレクトリから解決される動作を検証
  • NetCoreAppBuilder.cs(8行追加)

    • RuntimeLibraryBuilderWithServiceable()メソッドを新規追加
    • ライブラリのサービス可能プロパティを構成可能に

パフォーマンスへの影響

影響なし(テストコードの追加であり、製品コードの変更ではありません)

関連Issue

なし

その他

  • テストはプラットフォーム固有で、Windowsではスキップされます(Windowsではサービス提供ディレクトリの場所が異なるため)
  • テストフレームワークの拡張により、将来のアセット解決機能の変更時に対応可能な構造になっています
  • 作成者の指摘通り、初期計画でこのテストが存在していればサービス可能なアセット関連の問題をより早期に検出できたはずです

#111514 Run ILC after ComputeResolvedFilesToPublishList

  • 作成者: @sbomer
  • 作成日時: 2025年01月16日 23:20:09(UTC)
  • マージ日時: 2026年02月20日 22:09:47(UTC)
  • ラベル: area-NativeAOT-coreclr

概要

NativeAOT公開ビルドパイプラインの実行順序を修正し、ILC(IL Compiler)をComputeResolvedFilesToPublishListの後に実行するように変更しました。これにより、Issue #108909と#118298で報告されたビルド時のファイル処理に関する問題が解決されます。CopyNativeBinaryロジックも削除され、ビルドプロセスが簡素化されました。

変更内容

  • Microsoft.NETCore.Native.Publish.targets: ILCタスク実行タイミングを変更し、ComputeResolvedFilesToPublishList依存性を明示的に設定
  • ComputeManagedAssembliesToCompileToNative.cs: 新しい入力プロパティを追加してファイル解決との連携を強化
  • System.Diagnostics.FileVersionInfo.Tests.csproj: テスト構成の更新
  • AndroidBuild.props: 不要な設定を削除
  • AppleBuild.targets: Apple向けAOTビルド処理の調整
  • ProxyProjectForAOTOnHelix.proj: Helix上のAOTビルド設定微調整

パフォーマンスへの影響

直接的なパフォーマンス改善は記載されていませんが、ビルドプロセスの正規化による潜在的な最適化が期待できます。タスク実行順序の最適化により、ビルド時間の短縮や並列化の向上が見込まれます。

関連Issue

  • #108909 - ビルド時のファイル解決順序に関する問題
  • #118298 - CopyNativeBinaryロジックに関連する問題

その他

  • レビュープロセスで複数のコアレビュワー(agocke, MichalStrehovsky等)による確認済み
  • 作成者が「さらなるテストが必要」と記載しており、継続的な検証が予定されている
  • 主にNativeAOT関連のMSBuildタスク実行の内部的な改善であり、パブリックAPIへの影響はなし

目次