Freigeben über


InMemoryDirectoryInfo stellt Dateien „rootDir“ voran

InMemoryDirectoryInfo stellt jetzt das angegebene Stammverzeichnis den zugehörigen Dateien voran.

InMemoryDirectoryInfo wird von MatcherExtensions.Match verwendet, wodurch Matcher Globabgleichsmuster ohne Zugriff auf den Datenträger ausführen kann.

Vorheriges Verhalten

Zuvor wurden relative Pfade im argument files des -Konstruktors dem aktuellen Arbeitsverzeichnis (CWD, Current Working Directory) vorangestellt. Das führte zu einer unnötigen Abhängigkeit vom CWD für einen Typ, der im Arbeitsspeicher agieren soll.

Neues Verhalten

Ab .NET 9 werden relative Pfade im files-Argument des Konstruktors dem angegebenen Stammverzeichnis vorangestellt.

Eingeführt in Version

.NET 9 Preview 1

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Es gab blockierende Szenarios, bei denen speicherinterne Pfade einen anderen Laufwerkbuchstaben als den vom aktuellen Arbeitsverzeichnis verwendeten verwendet haben. Ein Beispiel finden Sie im dotnet/runtime-Issue 93107.

Wenn Sie auf das vorherige Verhalten angewiesen sind, passen Sie Ihren Code daran an, dass den Dateien jetzt das Stammverzeichnis vorangestellt wird. Beispiel:

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

Betroffene APIs