Delen via


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.

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

Betrokken API's