Udostępnij za pośrednictwem


InMemoryDirectoryInfo prepends rootDir do plików

InMemoryDirectoryInfo teraz poprzedza określony katalog główny do kolekcji plików.

InMemoryDirectoryInfo jest używany przez MatcherExtensions.Matchprogram , co umożliwia Matcher wykonywanie wzorców dopasowywania globów bez uzyskiwania dostępu do dysku.

Poprzednie zachowanie

Wcześniej ścieżki względne w files argumencie konstruktora były poprzedzane bieżącym katalogiem roboczym (CWD). Spowodowało to niepotrzebną zależność od CWD dla typu, który ma działać w pamięci.

Nowe zachowanie

Począwszy od platformy .NET 9, ścieżki względne w files argumencie konstruktora są poprzedzane określonym katalogiem głównym.

Wprowadzona wersja

.NET 9 (wersja zapoznawcza 1)

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Wystąpiły zablokowane scenariusze ze ścieżkami w pamięci przy użyciu litery dysku innej niż ta używana przez bieżący katalog roboczy. Zobacz na przykład problem z dotnet/runtime 93107.

Jeśli zależysz od poprzedniego zachowania, dostosuj kod, aby uwzględnić pliki, które są teraz poprzedzane katalogiem głównym. Na przykład:

// 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

Dotyczy interfejsów API