InMemoryDirectoryInfo prepends rootDir naar bestanden
InMemoryDirectoryInfo de opgegeven hoofdmap wordt nu voorafgegaan door de verzameling bestanden.
InMemoryDirectoryInfo
wordt gebruikt door MatcherExtensions.Match, waardoor de Matcher glob-overeenkomende patronen kunnen worden uitgevoerd zonder toegang te krijgen tot de schijf.
Vorig gedrag
Voorheen werden relatieve paden in het files
argument van de constructor voorafgegaan door de huidige werkmap (CWD). Dit heeft een onnodige afhankelijkheid van de CWD veroorzaakt voor een type dat in het geheugen moet werken.
Nieuw gedrag
Vanaf .NET 9 worden relatieve paden in het files
argument van de constructor voorafgegaan door de opgegeven hoofdmap.
Versie geïntroduceerd
.NET 9 Preview 1
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Er zijn geblokkeerde scenario's met in-memory paden met een andere stationsletter dan de stationsletter die wordt gebruikt door de huidige werkmap. Zie bijvoorbeeld dotnet/runtime-probleem 93107.
Aanbevolen actie
Als u afhankelijk bent van het vorige gedrag, past u uw code aan om rekening te houden met de bestanden die nu worden voorbereid met de hoofdmap. Voorbeeld:
// 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