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.
Empfohlene Maßnahme
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