Partilhar via


InMemoryDirectoryInfo antecede rootDir aos ficheiros

InMemoryDirectoryInfo agora anexa o diretório raiz especificado à sua coleção de arquivos.

InMemoryDirectoryInfo é utilizado por MatcherExtensions.Match, o que permite que Matcher execute padrões de correspondência glob sem aceder ao disco.

Comportamento anterior

Anteriormente, os files caminhos relativos no argumento do construtor eram prefixados com o diretório de trabalho atual (diretório de trabalho corrente - CWD). Isso causou uma dependência desnecessária do 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 serão precedidos pelo diretório raiz especificado.

Versão introduzida

.NET 9 Versão Prévia 1

Tipo de mudança disruptiva

Esta alteração é de natureza comportamental .

Motivo da mudança

Existiam cenários bloqueados com caminhos em memória que utilizavam uma letra de unidade diferente daquela do diretório de trabalho atual. Por exemplo, consulte dotnet/runtime issue 93107.

Se dependia do comportamento anterior, ajuste o seu código para ter em conta que os arquivos agora possuem o diretório raiz como prefixo. 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

APIs afetadas