次の方法で共有


InMemoryDirectoryInfo で rootDir がファイルの先頭に追加される

InMemoryDirectoryInfo は、指定したルートディレクトリをファイルのコレクションに先頭に付加します。

InMemoryDirectoryInfoMatcherExtensions.Matchによって使用されます。これにより、 Matcher はディスクにアクセスせずに glob 照合パターンを実行できます。

以前の動作

以前は、files 引数の相対パスには、現在の作業ディレクトリ (CWD) が前置されていました。 これにより、本来はメモリ内で動作するはずの型に対して、CWD に対する不要な依存関係が発生しました。

新しい動作

.NET 9 以降では、コンストラクターの files 引数の相対パスは、指定したルート ディレクトリの先頭に付加されます。

導入されたバージョン

.NET 9 Preview 1

破壊的変更の種類

この変更は 動作の変更です。

変更の理由

現在の作業ディレクトリで使用されているドライブ文字とは異なるドライブ文字でインメモリのパスを使用する際に、シナリオがブロックされることがありました。 たとえば、 dotnet/runtime の問題 93107 を参照してください。

前の動作に依存していた場合は、ルート ディレクトリの先頭に追加されているファイルを考慮するようにコードを調整します。 例えば次が挙げられます。

// Since rootDir is also relative, it could've been used to filter the matching scope of `files`.
-string rootDir = "dir1";
// Now that's not possible; everything in `files` is under `root`.
+string rootDir = "root";
string[] files = ["dir1/test.0", "dir1/subdir/test.1", "dir2/test.2"];

-PatternMatchingResult result = new Matcher().AddInclude("**/*").Match(rootDir, files);
// Adjust the pattern if you want to scope down to dir1.
+PatternMatchingResult result = new Matcher().AddInclude("dir1/**/*").Match(rootDir, files);
Console.WriteLine(string.Join(", ", result.Files.Select(x => x.Path)));

// Output:
// dir1/test.0
// dir1/subdir/test.1

影響を受ける API