InMemoryDirectoryInfo ajoute rootDir au début des fichiers
InMemoryDirectoryInfo ajoute maintenant le répertoire racine spécifié au début de sa collection de fichiers.
InMemoryDirectoryInfo
est utilisé par MatcherExtensions.Match, ce qui permet au Matcher d’exécuter des modèles de correspondance glob sans accéder au disque.
Comportement précédent
Auparavant, les chemin d'accès relatifs dans l’argument files
du constructeur étaient précédés du répertoire de travail actuel (CWD). Cela a provoqué une dépendance inutile sur le CWD pour un type censé fonctionner en mémoire.
Nouveau comportement
À compter de .NET 9, les chemins d’accès relatifs dans l’argument files
du constructeur sont précédés du répertoire racine spécifié.
Version introduite
.NET 9 Préversion 1
Type de changement cassant
Ce changement est un changement de comportement.
Raison du changement
Il y a eu des scénarios bloqués avec des chemins en mémoire utilisant une lettre de lecteur autre que celle utilisée par le répertoire de travail actuel. Par exemple, consultez le problème dotnet/runtime 93107.
Action recommandée
Si vous dépendez du comportement précédent, ajustez votre code pour prendre en compte les fichiers qui sont maintenant précédés du répertoire racine. Par exemple :
// 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