InMemoryDirectoryInfo により、ファイルの先頭に rootDir が追加される
InMemoryDirectoryInfo により、ファイルのコレクションの先頭に指定したルート ディレクトリが追加されるようになりました。
InMemoryDirectoryInfo
は MatcherExtensions.Match によって使われます。これにより、Matcher はディスクにアクセスすることなく glob 照合パターンを実行できるようになります。
以前の動作
以前は、コンストラクターの files
引数の相対パスには、現在の作業ディレクトリ (CWD) が先頭に追加されていました。 このため、メモリ内で機能するはずの型でも、CWD への不要な依存関係が生じていました。
新しい動作
.NET 9 以降、コンストラクターの files
引数の相対パスには、指定したルート ディレクトリが先頭に追加されます。
導入されたバージョン
.NET 9 Preview 1
破壊的変更の種類
この変更は、動作変更です。
変更理由
現在の作業ディレクトリで使われているものとは異なるドライブ文字を使うメモリ内パスでは、ブロックされるシナリオがありました。 例については、dotnet/ランタイムの問題 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
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET