Pull Request on 2026年06月10日

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

注意点

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



#129213 [cDAC] fix RuntimeMutableTypeSystem contract name bug

  • 作成者: @rcj1
  • 作成日時: 2026年06月10日 03:31:22(UTC)
  • マージ日時: 2026年06月10日 06:06:10(UTC)
  • ラベル: area-Diagnostics-coreclr

概要

cDAC(Compact Diagnostic Access Component)の契約解決処理における IRuntimeMutableTypeSystem のコントラクト名バグを修正しました。CachingContractRegistry / ContractDescriptorTarget が正しくコントラクトを発見できるよう、バージョン照合時に使用するコントラクト名を修正しています。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/Contracts/IRuntimeMutableTypeSystem.cs
    • IContract.Name プロパティを nameof(IRuntimeMutableTypeSystem) から nameof(RuntimeMutableTypeSystem) に修正
    • これにより、ターゲットの契約記述子に対するバージョン参照時に正しいコントラクト名が使用されるようになります

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

診断機能に関連する内部実装の修正であり、公開APIへの影響はありません。


#129188 JIT: Fix arm64 shifted-register containment for long compares

概要

ARM64プラットフォームにおいて、シフト演算を含む比較操作(CMP)の遅延レジスタ含有(containment)ロジックを修正しました。従来は比較命令の親ノードの型(常にTYP_INT)からシフト量の最大値を計算していたため、64ビット比較に含まれる32〜63ビットのシフトが含有できず、シフト命令と比較命令が分離されていました。本修正により、シフトノード自身の型を使用して最大シフト量を決定することで、cmp x0, x1, LSL #55 のような最適化された単一命令への含有が可能になります。

変更内容

  • lower.cpp: IsContainableUnaryOrBinaryOp関数を修正。シフト量の上限値を親ノードの型ではなくシフトノード自身の型から計算するように変更
  • lowerarmarch.cpp: ARM64固有の含有ロジック調整
  • compareAnd2Chains.cs: 新テストケース追加(AND-シフト-比較のパターン)
  • Cmp.cs: 64ビット比較でのシフト含有テストケース(CmpLargeShift64BitSwap)を追加。既存テストを更新して最適化されたコード生成を反映
  • And.cs: AND命令のテストケース更新

パフォーマンスへの影響

改善あり。比較操作に含まれるシフト演算が単一のシフト付き比較命令(CMP with LSL)に統合され、以前の分離された命令列(LSL + CMP)から1命令削減。特に64ビット長比較でシフト量が32以上の場合に効果があります。

関連Issue

#111889

その他

本修正は内部JITコンパイラロジック(Lowering)の改善であり、公開APIへの影響はありません。ARM64アーキテクチャ固有の最適化です。


#129178 Disable SystemCoreLibDirectory on ReadyToRun

  • 作成者: @BrzVlad
  • 作成日時: 2026年06月09日 16:22:35(UTC)
  • マージ日時: 2026年06月10日 04:51:24(UTC)
  • ラベル: area-VM-coreclr

概要

ReadyToRun (R2R) コンポジット モード環境下で SystemCoreLibDirectory テストが失敗する問題を解決するため、このテストを CrossGen2/R2R コンパイルから除外します。テストが System.Private.CoreLib.dll をカスタムパスにコピーして検証する際に、R2R コンポジットイメージを参照するようになり、別の場所へのコピー時にR2Rイメージの読み込みが失敗するためです。

変更内容

  • src/tests/Loader/SystemCoreLibDirectory/SystemCoreLibDirectory.csproj: <CrossGenTest>false</CrossGenTest> を追加して、このテストプロジェクトを CrossGen2/R2R 実行の対象から除外しました。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更により、R2R コンポジットモードでのテスト実行時のランタイムクラッシュを回避します。テストは標準的なJIT コンパイルモードでのみ実行されるようになります。


#129163 Disable failing tests on mono

  • 作成者: @BrzVlad
  • 作成日時: 2026年06月09日 11:45:40(UTC)
  • マージ日時: 2026年06月10日 04:51:50(UTC)
  • ラベル: area-System.Text.Json

概要

System.Text.Jsonのテストスイートにおいて、Monoランタイムで失敗しているテストを[ActiveIssue]属性でスキップするようにしました。このアプローチにより、既知の問題を追跡用のGitHub Issueと紐付けながら、テストの失敗を一時的に無視できます。

変更内容

  • PolymorphicTests.TypeClassifier.cs: MetadataServices_NullPolymorphismOptions_DoesNotActivateAttributeClassifierテストに[ActiveIssue]スキップを追加(Mono Apple mobile環境向け)
  • AsyncEnumerableTests.cs: JSONL非同期列挙型の「部分的項目失敗」テスト2件(Stream及びPipeWriter変種)に[ActiveIssue]スキップを追加(Mono Apple mobile環境向け)

パフォーマンスへの影響

影響なし

関連Issue

#128766 #128765

その他

  • このPRは、Monoランタイム上のApple mobile プラットフォーム(iOSなど)で発生している既知の問題に対する一時的な対応です
  • テストは完全に削除されるのではなく、[ActiveIssue]属性でスキップされるため、対応する問題が解決された際に再度有効化できます

#129161 Address runtime async TaskScheduler TODO

概要

非デフォルトTaskSchedulerを使用したawait継続パスで不要なメモリアロケーションを削減するリファクタリングです。CoreCLRの非同期継続コードがTaskSchedulerAwaitTaskContinuationインスタンスを割り当てずに直接継続をスケジュール/実行できるようにしながら、既存のインライン実行とキューイングの動作を保持します。

変更内容

  • TaskContinuation.cs: RunOrScheduleAction(...)ヘルパーメソッドを追加し、AwaitTaskContinuation.CreateTask(...)をprotected staticヘルパーにリファクタリング(明示的なExecutionContext?パラメータを受け取る)
  • RuntimeAsyncTaskContinuation.cs: TaskSchedulerAwaitTaskContinuationのインスタンス割り当てを削除し、RunOrScheduleActionを直接呼び出すように更新
  • AsyncHelpers.CoreCLR.cs: キャプチャされたTaskScheduler継続フォローアップパスでRunOrScheduleActionを直接利用

パフォーマンスへの影響

メモリアロケーション削減:非デフォルトTaskSchedulerでの継続実行時にTaskSchedulerAwaitTaskContinuationインスタンスの割り当てが不要になることで、GCプレッシャー低減が期待されます。

関連Issue

#129161

その他

変更はランタイムの内部実装(System.Runtime.CompilerServicesおよびSystem.Threading.Tasks)に限定され、公開APIは変更されていません。


#129157 JIT: Clear out return value references from continuations

概要

非同期2(async2)のランタイム非同期変換において、continuation再利用時に戻り値参照をプロアクティブにクリアする変更です。これにより、continuationが再利用される際に結果オブジェクトが意図せず生存し続けることを防ぎます。Async1と同様に、resumption後に待機した呼び出しの戻り値をコピーした後、GC参照をクリアします。

変更内容

  • async.cpp/async.h: AsyncTransformation::ClearReturnValueOnResumptionヘルパーメソッドを新規追加し、continuation再利用時に結果をコピーした後のGC参照クリアロジックを実装
  • layout.cpp/layout.h: GCポインタを含む構造体戻り値のクリア戦略をサポートするヘルパーメソッドを追加(小規模/参照スパース構造体はスロット単位、その他は一括ゼロイング)
  • lower.cpp/lower.h: 既存のreturn値クリアロジックを新規ヘルパーへリファクタリング

パフォーマンスへの影響

影響なし。本変更はGCメモリ管理の改善(オブジェクトの不要な生存期間短縮)を目的としており、実行時のオーバーヘッドは最小限に設計されています。

関連Issue

#126735

その他

  • 対象: コンパイラ(JIT)の内部実装
  • 公開APIへの影響なし
  • Async1の実装と同様のクリアリング戦略をAsync2に適用し、continuationの再利用時にメモリリーク的な状況を防止します

#129144 Clean up in rangecheck

  • 作成者: @EgorBo
  • 作成日時: 2026年06月08日 23:23:56(UTC)
  • マージ日時: 2026年06月10日 13:14:05(UTC)
  • ラベル: area-CodeGen-coreclr

概要

rangecheck.cppにおける JIT コンパイラのクリーンアップ。Range Check が assertionprop と重複していた定数インデックス処理を削除し、Array の長さ取得ロジックを修正。従来の SSA ベース GetRangeWorker の不正な利用(DoesOverflow 呼び出し欠落)を VN ベース GetRangeFromAssertions に置き換え、正確性を向上させた。

変更内容

  • src/coreclr/jit/assertionprop.cpp (-49行): 削除(重複機能の廃止)
  • src/coreclr/jit/compiler.h (-1行): 削除
  • src/coreclr/jit/rangecheck.cpp (+9/-64行):
    • 定数インデックス処理の削除(assertionprop で既に実装)
    • Array 長取得時の GetRangeWorker 呼び出しを GetRangeFromAssertions に変更
    • オーバーフロー処理の適切化

パフォーマンスへの影響

軽微な回帰が報告されている一方で、軽微なコンパイル時間の改善が確認されている。Azure Diffs に詳細ベンチマーク結果が記載されている。

関連Issue

#129144

その他

本 PR は GitHub Copilot の支援を受けて生成されたもの。従来コードの正確性問題(GetRangeWorker を DoesOverflow なしで呼び出していた点)を修正しており、ロジック上の改善を伴っている。


#129121 Add checks for malformed sizes for ZIP64 files

概要

System.IO.Compression内のZIP64メタデータ解析を強化し、malformedなZIP64 extra-field値を即座に検出・拒否します。これまでは負の値が後で検出されていましたが、本変更によりパース時に早期終了してInvalidDataExceptionを発生させます。#127990のフォローアップです。

変更内容

  • ZipBlocks.cs: ZIP64の非圧縮サイズ、圧縮サイズ、ローカルヘッダーオフセットの検証をフィールド読み込み時に移動。Int64で表現できないmalformedなサイズ値を即座に検出するようになりました。
  • zip_InvalidParametersAndStrangeFiles.cs: 非圧縮サイズが0xFFFF_FFFF_FFFF_FFFF(-1Lと解釈)のZIP64ファイルを生成し、InvalidDataExceptionが発生することをテストする回帰テストを追加。

パフォーマンスへの影響

影響なし

関連Issue

#127990

その他

  • 変更はSystem.IO.Compressionライブラリの内部実装に限定され、公開APIの変更なし
  • セキュリティ: Zip64メタデータの妥当性検証強化により、corrupt/malformedデータの処理時における予期しない動作を防止

#129120 Update container image digests

概要

ビルドツール前提条件用のコンテナイメージダイジェストを自動更新するPR。mcr.microsoft.com/dotnet-buildtools/prereqs イメージの22個のダイジェストが新しいバージョンに更新されています。これはRenovate Botによる自動化された依存関係更新です。

変更内容

  • eng/pipelines/common/templates/pipeline-with-resources.yml: 21行の変更(ダイジェスト21個を更新)
  • eng/pipelines/libraries/helix-queues-setup.yml: 3行の変更(ダイジェスト1個を更新)

計22個のmcr.microsoft.com/dotnet-buildtools/prereqsコンテナイメージダイジェストがそれぞれ新しいハッシュに更新されています。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRは自動化ツール(.NET Renovate Bot)によって生成されたもので、コンテナイメージの依存関係を最新に保つための機械的な更新です。変更はビルド/テストインフラストラクチャのみに限定され、ランタイムやコンパイラの機能変更は含まれていません。


#129098 [WASI][Mono] Enable Mono AOT on WASI in runtime-wasm CI leg

概要

Mono AOT on WASIの有効化と、AOT-トリム済みWASIビルドに必要なテストインフラストラクチャの修正。

WASI起動時にAOTイメージから参照されるアセンブリの遅延読み込みを有効化し、コアlib初期化中の再入可能性による起動時中止を回避します。ビルドパイプライン、テストゲーティング、プラットフォーム検出を適応させ、トリム済みWASIテストレグが正常に動作するようにします。

変更内容

  • src/mono/wasi/runtime/driver.c — mono_wasm_load_runtime内でmono_opt_aot_lazy_assembly_load = 1を設定。AOTイメージから参照されるアセンブリを遅延ロードして、起動時の再入可能性を回避。

  • eng/testing/tests.wasm.targets — WASI上でBrowserWasmApp.targetsベースのローカルAOTプロキシロジックをスキップ。

  • eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml — WASIスモークおよびAOTレグでRunWasmSamples=falseを設定、WASIのAOTレグでスモークのみを実行。

  • eng/pipelines/runtime-wasm.yml — excludeOptional: falseを追加してWASM専用パイプラインがWASIレグを実行。

  • PlatformDetection.cs — IsBuiltWithAggressiveTrimmingにWASIを含める(WASIアプリは常にTrimMode=fullでビルド)。

  • NumberFormatInfoTests.cs — FullICUPlatformが!PlatformDetection.IsWasmを使用してWASIを除外。

  • DataContractJsonSerializer.cs / DataContractSerializer.cs — FileStreamSurrogateテストを[SkipOnPlatform(TestPlatforms.Wasi, ...)]でゲート(/tmpがプリオープンされていない)。

  • src/mono/sample/wasi/jcoサンプル — 未使用のサンプルを削除。

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更は内部ランタイム実装(WASI駆動ロジック)およびテストインフラストラクチャの修正です。公開APIへの破壊的変更はありません。


#129094 [ci-scan] Skip ActivityTracking tests on Android Mono (refs #129088)

概要

Android上のMonoランタイムでBasicEventSourceTests.ActivityTrackingテストが一貫して失敗する問題に対応するPRです。これらのテストではEventSource Start/Stop操作後もActivity IDがall-zeros Guidのままとなり、Androidの特定の条件(スレッド/アクティビティコンテキストの伝播に問題)が原因です。[ActiveIssue]属性にPlatformDetection.IsAndroid && PlatformDetection.IsMonoRuntime条件を追加し、スキップ対象をAndroid Mono環境のみに限定します。

変更内容

  • src/libraries/System.Diagnostics.Tracing/tests/BasicEventSourceTest/ActivityTracking.cs
    4つのActivityTracking関連テスト(StartStopCreatesActivity、ActivityFlowsAsync、SetCurrentActivityIdBeforeEventFlowsAsync、SetCurrentActivityIdAfterEventDoesNotFlowAsync)に[ActiveIssue]属性を追加し、Android Mono環境のみでスキップするよう条件を限定

パフォーマンスへの影響

影響なし

関連Issue

#129088

その他

  • 複数のAndroidアーキテクチャ(arm、x64、arm64、x86)の複数ビルドで同一の失敗パターンを確認済み(builds 1449088, 1450787, 1452386, 1452872)
  • 公開APIや実装への変更ではなく、テストのスキップ条件の精密化(既存のAndroid全体スキップから、Android Mono環境のみへ限定)
  • CI自動スキャン機構により検出・報告された安定的な失敗への対応

#129054 [cDAC] Remove EnumerateMonitorEventWaitList implementation from DAC and cDAC

  • 作成者: @barosiak
  • 作成日時: 2026年06月05日 21:48:16(UTC)
  • マージ日時: 2026年06月10日 18:51:23(UTC)
  • ラベル: area-Diagnostics-cdac

概要

EnumerateMonitorEventWaitList APIの実装を、DAC(デバッグアクセスコンポーネント)と cDAC(マネージドDAC)の両方から削除します。基盤となるwaiter-to-thread マッピング(Condition.t_waiterForCurrentThread)がCondition.Wait時にクリアされることで破損していること、および現在このAPIを呼び出すコンシューマーがないことから、E_NOTIMPLを返すように変更します。

変更内容

  • dacdbiimpl.cpp - EnumerateMonitorEventWaitListの実装を削除し、E_NOTIMPLを返すようにシンプル化(61行削除)
  • DacDbiImpl.cs - レガシーフォールバック委譲をHResults.E_NOTIMPLに置き換え

パフォーマンスへの影響

影響なし

関連Issue

#129054

その他

Copilotが生成した概要との矛盾があります。実装追加ではなく、破損していた実装の削除であることに注意してください。本PRの意図は機能削除により、デバッグサポートライブラリの不具合な実装を廃止することです。


#129022 JIT: weight loop body cost by block frequency in cloning heuristic

概要

JIT のループクローニング発見的手法を改善し、ループ本体のブロックを実行頻度で重み付けして費用計算を行うように変更しました。これにより、冷たいブロック(実行頻度の低いブロック)がクローニングの判定に過度に影響するのを防ぎ、ホット化可能な小さな GDV チェックを含むループに対してクローニングがより積極的に適用されるようになります。System.Collections.ContainsTrue<Int32>.ImmutableList で約 7% のパフォーマンス回復が見込まれます。

変更内容

  • src/coreclr/jit/loopcloning.cpp: optCloningHeuristic 内の費用見積もりロジックを修正
    • ループ本体の各ブロックのノード数を min(1.0, blockWeight / headerWeight) で重み付けして計算
    • クローニングの費用メトリクスから、実行頻度の低いブロックへのペナルティを軽減
    • ダンプ出力を拡張し、クローニング却下時に利益と重み付けコストを表示

パフォーマンスへの影響

  • System.Collections.ContainsTrue<Int32>.ImmutableList で約 7% の性能向上
  • 重み付けベースの費用計算により、ホットパスを含むループに対してクローニングの機会が増加
  • 既存のヒューリスティックのクローン削減効果はほぼ維持

関連Issue

#128996

その他

  • この変更はランタイムの JIT コンパイラ最適化に関する内部実装の改善であり、公開 API への影響はありません
  • ループクローニングは仮想化可能な呼び出しの除去などの目的で、ループ本体のコピーを作成する最適化手法です

#128943 Opt pooled async methods out of runtime async

概要

Runtime async生成機能が利用可能になったが、現在のところASP.NETでパフォーマンス低下が報告されているため、プールされた非同期メソッド(PoolingAsyncValueTaskMethodBuilder*)に対してruntime async生成をオプトアウトするメカニズムを導入します。内部属性RuntimeAsyncMethodGenerationを新規定義し、該当するメソッドに[RuntimeAsyncMethodGeneration(false)]を適用して、runtime asyncへの変換を回避します。

変更内容

  • 新規属性定義: src/libraries/Common/src/System/Runtime/CompilerServices/RuntimeAsyncMethodGenerationAttribute.cs - 内部共有ソースとしてruntime async生成を制御する属性を定義
  • コア I/O: System.Private.CoreLibのStream.ReadAtLeastAsyncCoreおよびBufferedFileStreamStrategyの読書き非同期パスをオプトアウト
  • ネットワーク層: System.Net.WebSockets、System.Net.Security、System.Net.Httpの複数のプールされた非同期メソッド(TLSフレーム処理、WebSocket受信、HTTP接続読み取りなど)をオプトアウト
  • パイプライン: System.IO.Pipelinesのストリーム書き込み/読み取りコアループをオプトアウト
  • 共有ソース配線: 該当するライブラリプロジェクトのcsprojファイルに属性定義ファイルをリンク追加

パフォーマンスへの影響

影響なし。本変更はruntime asyncによる回帰を回避することが目的であり、既存のプールされた非同期実装(PoolingAsyncValueTaskMethodBuilder)の継続使用により、ASP.NETなどのワークロードでのパフォーマンス安定性を維持します。

関連Issue

#128943

その他

  • この属性はコンパイラ側で処理される内部実装であり、公開APIではありません
  • Runtime asyncの代替実装が将来提供されるまでの暫定対応と記載されています
  • ASP.NET関連の回帰を防ぐことが主な理由(cc: @BrennanConroy)

#128942 Don't throw in NegotiateClientCertificateAsync if Post-Handshake auth wasn't enabled.

  • 作成者: @rzikm
  • 作成日時: 2026年06月03日 11:44:19(UTC)
  • マージ日時: 2026年06月10日 09:01:09(UTC)
  • ラベル: area-System.Net.Security

概要

Unix/OpenSSL環境でTLS 1.3のPost-Handshake Authentication (PHA)が有効でない場合に、SslStream.NegotiateClientCertificateAsyncが例外をスローするのではなく、正常に何もしない(no-op)ように改善します。クライアント証明書をオファーしないピアとの通信時の暗号例外を回避します。

変更内容

  • pal_ssl.c: OpenSSL のTLS 1.3 PHA初期化失敗時にエラーコードを設定し、ネイティブレイヤーでのエラー報告を改善
  • Interop.OpenSsl.cs: OpenSSL再ネゴシエーション失敗のマップ方法を変更し、マネージドコードに適切に伝播
  • SslStreamPal.Unix.cs: 再ネゴシエーション失敗時に状態を持つProtocolTokenを返すように修正
  • SslStreamNetworkStreamTest.cs: TLS 1.3でPHAがオファーされていないシナリオの関数テストを追加(Linux/OpenSSL対象)

パフォーマンスへの影響

影響なし

関連Issue

#128942

その他

この変更はUnix/OpenSSL環境のみに影響します。TLS 1.3でPost-Handshake Authenticationが無効な場合のエッジケースを処理し、予期しない例外ではなく適切なステータスをクライアントに返すようになります。


#128811 JIT: Fix debug igDataSize assignment to use code size (so exclude gc vars)

概要

JITコンパイラのデバッグビルドにおいて、igDataSizeの割り当てを修正するパッチです。igDataSizeは命令記述子(instruction descriptors)の開始アドレスからのサイズを表すべきですが、GC変数を含むIG全体のサイズ(gs)で割り当てられていました。これを正しくコードサイズ(sz)に変更し、デバッグアサーションエラーを解決します。

変更内容

  • src/coreclr/jit/emit.cpp: igDataSizeの割り当てをgsからszに修正(1行変更)

パフォーマンスへの影響

なし(デバッグビルドのみの修正)

関連Issue

#128536で報告されたアサーションエラーの修正

その他

  • この変更はJITコンパイラの内部実装(デバッグ用メタデータ)に関する修正です
  • 公開APIへの影響はありません
  • igDataは命令記述子のアドレスを指し、そのサイズ情報が正確である必要があります

#128479 Represent managed-return-values as native vars

概要

CoreCLR JIT/VMのデバッグ情報表現を更新し、マネージド呼び出しの戻り値をCALL_INSTRUCTION IPマッピングエントリに依存する従来の方式から、新しいCALL_RETURN_ILNUMセンチネルとcallReturnValueILOffsetフィールドを持つ明示的なICorDebugInfo::NativeVarInfoエントリとして表現するように変更しました。この変更により、デバッグ情報のエンコード/デコード経路も対応が必要となります。

変更内容

  • コアインターフェース: cordebuginfo.hにCALL_RETURN_ILNUMとMAX_ILNUMの更新を追加、CorInfoTypes.VarInfo.csにcallReturnValueILOffsetを拡張
  • JIT コンパイラ: 複数のエミッタ(emitxarch.cpp、emitwasm.cpp、emitriscv64.cpp等)からCALL_INSTRUCTIONマッピング出力を削除、scopeinfo.cppで呼び出しごとの戻り値位置情報収集を追加
  • コード生成: codegencommon.cppで呼び出し後の戻り値位置情報をキャプチャして記録、emit.hのEmitCallParamsからdebugInfoフィールドを削除しreturnValueCallフィールドを追加
  • デバッグ情報処理: debuginfostore.cppでCALL_RETURN_ILNUMの特別エンコード/デコードロジックを追加、R2R コンパイラの変数blob書き込みを更新

パフォーマンスへの影響

影響なし

関連Issue

#128397

その他

重要な互換性注意:EmitCallParams構造体のdebugInfoフィールド削除により、RISC-V64やLoongArch64などのアーキテクチャ固有のgenCallInstruction実装がparams.debugInfoへの割り当てをまだ保持している場合、コンパイル失敗が発生します。これらのバックエンドは新しいreturnValueCallメカニズムに対応する必要があります。

JITインターフェースバージョンガイド(jiteeversionguid.h)が更新され、この変更がバージョニングに反映されています。


#128360 FileSystemWatcher.Linux/OSX: raise Error event when FileSystemWatcher's watched directory is deleted or moved.

概要

System.IO.FileSystemWatcherがLinux/macOS上で監視対象のルートディレクトリが削除または移動された場合にErrorイベントを発生させるように改善しました。これによりWindowsの動作に合わせて、監視が無効になったことを通知できるようになります。

変更内容

  • Linux: inotifyにIN_MOVE_SELFフラグを追加し、ルートディレクトリの移動を検出。IN_IGNOREDまたはルートのIN_MOVE_SELFイベントを監視の終了と見なし、Errorイベントをキューイング
  • macOS: kFSEventStreamEventFlagRootChangedをルート変更の終了シグナルと扱い、Errorイベントを発生させてイベントストリームを停止。従来の"rescan"や"overflow"条件としての扱いから変更
  • System.IO.FileSystemWatcher: ルート削除/移動時の例外メッセージ生成の共通ヘルパーを追加
  • PhysicalFilesWatcher: ルートディレクトリが存在しない場合の回避策を削除し、OnErrorの発火に依存するように簡潔化
  • テスト: 監視対象ディレクトリ削除時と移動時のError動作をカバーするテストを追加
  • リソース: エラーメッセージ用のローカライズ文字列を追加

パフォーマンスへの影響

影響なし

関連Issue

#126295

その他

このプリは公開APISystem.IO.FileSystemWatcher.Errorイベントの動作変更となり、Linux/macOS上で以前は発生しなかったエラーが新たに発生するようになります。ルートディレクトリの削除/移動時に適切にErrorイベントハンドラーで対応する必要がある場合があります。


目次