Share via


InMemoryDirectoryInfo antepone rootDir ai file

InMemoryDirectoryInfo antepone ora la directory radice specificata alla raccolta di file.

InMemoryDirectoryInfo viene usato da MatcherExtensions.Match, che consente a Matcher di eseguire criteri di corrispondenza GLOB senza accedere al disco.

Comportamento precedente

In precedenza, ai percorsi relativi nell'argomento files del costruttore veniva anteposta la directory di lavoro corrente. Ciò causava una dipendenza non necessaria dalla directory di lavoro corrente per un tipo che dovrebbe funzionare in memoria.

Nuovo comportamento

A partire da .NET 9, ai percorsi relativi nell'argomento files del costruttore viene anteposta la directory radice specificata.

Versione introdotta

.NET 9 Anteprima 1

Tipo di modifica che causa un'interruzione

Questa è una modifica funzionale.

Motivo della modifica

Sono stati riscontrati scenari di blocco con percorsi in memoria che usavano una lettera di unità diversa da quella usata dalla directory di lavoro corrente. Ad esempio, vedere il problema dotnet/runtime 93107.

Se si dipende dal comportamento precedente, modificare il codice in modo da tenere conto del fatto che ai file viene ora anteposta la directory radice. Ad esempio:

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

API interessate