Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
InMemoryDirectoryInfo теперь добавляет указанный корневой каталог в коллекцию файлов.
InMemoryDirectoryInfo
используется MatcherExtensions.Match, что позволяет Matcher выполнять глобальное сопоставление шаблонов без доступа к диску.
Предыдущее поведение
Ранее относительные пути в files
аргументе конструктора были предопределены текущим рабочим каталогом (CWD). Это вызвало ненужную зависимость от CWD для типа, который должен работать в памяти.
Новое поведение
Начиная с .NET 9, относительные пути в аргументе files
конструктора предшествуют указанному корневому каталогу.
Представленная версия
.NET 9( предварительная версия 1)
Тип разрушающего изменения
Причина изменения
Были заблокированы сценарии с путями в памяти с использованием буквы диска, отличной от той, которая используется текущим рабочим каталогом. Например, см. проблему dotnet/runtime 93107.
Рекомендуемое действие
Если вы зависели от предыдущего поведения, измените код с учетом того, что теперь файлы предваряются корневым каталогом. Рассмотрим пример.
// 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