Compartir a través de


InMemoryDirectoryInfo antepone rootDir a los archivos

InMemoryDirectoryInfo ahora antepone el directorio raíz especificado a su colección de archivos.

MatcherExtensions.Match usa InMemoryDirectoryInfo, lo que permite a Matcher ejecutar patrones de coincidencia de glob sin tener acceso al disco.

Comportamiento anterior

Anteriormente, las rutas de acceso relativas del argumento files del constructor se anteponían al directorio de trabajo actual (CWD). Esto provocaba una dependencia innecesaria del CWD para un tipo que se supone que funciona en memoria.

Comportamiento nuevo

A partir de .NET 9, las rutas de acceso relativas del argumento files del constructor se anteponen al directorio raíz especificado.

Versión introducida

Versión preliminar 1 de .NET 9

Tipo de cambio importante

Este es un cambio de comportamiento.

Motivo del cambio

Se daban bloqueos con rutas de acceso en memoria al usar una letra de unidad distinta de la empleada por el directorio de trabajo actual. Por ejemplo, consulte el problema 93107 dotnet/runtime.

Si necesitaba el comportamiento anterior, ajuste el código para que tenga en cuenta los archivos que ahora se anteponen al directorio raíz. Por ejemplo:

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