InMemoryDirectoryInfo prepends rootDir to files
InMemoryDirectoryInfo nyní předsadí zadaný kořenový adresář do své kolekce souborů.
InMemoryDirectoryInfo
používá se pomocí MatcherExtensions.Matchfunkce , která umožňuje Matcher spouštět vzory porovnávání globů bez přístupu k disku.
Předchozí chování
Dříve byly relativní cesty v files
argumentu konstruktoru předem odděleny aktuálním pracovním adresářem (CWD). To způsobilo zbytečnou závislost na CWD pro typ, který má fungovat v paměti.
Nové chování
Počínaje rozhraním .NET 9 jsou relativní cesty v files
argumentu konstruktoru předem odděleny zadaným kořenovým adresářem.
Zavedená verze
.NET 9 Preview 1
Typ zásadní změny
Tato změna je změna chování.
Důvod změny
Byly zablokované scénáře s cestami v paměti pomocí jiného písmena jednotky, než je písmeno používané aktuálním pracovním adresářem. Podívejte se například na problém s dotnet/runtime 93107.
Doporučená akce
Pokud jste záviseli na předchozím chování, upravte kód tak, aby zohlednil soubory, které se teď předzálohují kořenovým adresářem. Příklad:
// 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