InMemoryDirectoryInfo 将 rootDir 添加到文件前面
InMemoryDirectoryInfo现在将指定的根目录追加到其文件集合。
InMemoryDirectoryInfo
由MatcherExtensions.Match使用,这使Matcher能够在不访问磁盘的情况下执行 glob 匹配模式。
旧行为
以前,构造函数的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