O InMemoryDirectoryInfo prepara o rootDir para arquivos
O InMemoryDirectoryInfo agora prepara o diretório raiz especificado à coleção de arquivos.
O InMemoryDirectoryInfo
é usado por MatcherExtensions.Match, o que permite o Matcher executar padrões de correspondência glob sem acessar o disco.
Comportamento anterior
Anteriormente, os caminhos relativos no argumento files
do construtor eram precedidos com o CWD (diretório de trabalho atual). Isso causou uma dependência desnecessária no CWD para um tipo que deveria funcionar na memória.
Novo comportamento
A partir do .NET 9, os caminhos relativos no argumento files
do construtor são anexados com o diretório raiz especificado.
Versão introduzida
Versão prévia 1 do .NET 9
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
Havia cenários bloqueados com caminhos na memória usando uma letra de unidade diferente daquela usada pelo diretório de trabalho atual. Por exemplo, consulte o problema dotnet/runtime 93107.
Ação recomendada
Caso dependesse do comportamento anterior, ajuste o código para considerar os arquivos que estão sendo anexados ao diretório raiz. Por exemplo:
// 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