From 30eb34ab614a5f215220228b56da0f87b9c883b3 Mon Sep 17 00:00:00 2001 From: wangjunzzz <> Date: Thu, 26 Feb 2026 15:01:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dcli=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Lion/AbpPro/Cli/Utils/ReplaceHelper.cs | 54 ++++++++++++++++--- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs index d8ad5b7b..d0966f17 100644 --- a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs +++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs @@ -1,4 +1,4 @@ -namespace Lion.AbpPro.Cli.Utils; +namespace Lion.AbpPro.Cli.Utils; public static class ReplaceHelper { @@ -50,26 +50,64 @@ public static class ReplaceHelper string moduleName, string version, bool vben5) + { + // 先收集所有需要重命名的目录,按深度排序(深的先处理) + var directoriesToRename = new List<(DirectoryInfo DirectoryInfo, string NewDirectoryPath)>(); + CollectDirectoriesToRename(sourcePath, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5, directoriesToRename); + + // 按路径深度降序排序,确保先处理深层目录,再处理父目录 + var sortedDirectories = directoriesToRename + .OrderByDescending(d => d.DirectoryInfo.FullName.Count(c => c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar)) + .ToList(); + + foreach (var (directoryInfo, newDirectoryPath) in sortedDirectories) + { + if (directoryInfo.FullName != newDirectoryPath) + { + try + { + directoryInfo.MoveTo(newDirectoryPath); + } + catch (IOException ex) + { + // 如果目录被占用,等待重试 + Thread.Sleep(100); + directoryInfo.MoveTo(newDirectoryPath); + } + } + } + } + + private static void CollectDirectoriesToRename( + string sourcePath, + string oldCompanyName, + string oldProjectName, + string oldModuleName, + string companyName, + string projectName, + string moduleName, + string version, + bool vben5, + List<(DirectoryInfo DirectoryInfo, string NewDirectoryPath)> directoriesToRename) { var directories = Directory.GetDirectories(sourcePath); foreach (var subDirectory in directories) { - RenameAllDirectories(subDirectory, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5); - var directoryInfo = new DirectoryInfo(subDirectory); + + // 先递归收集子目录 + CollectDirectoriesToRename(subDirectory, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5, directoriesToRename); + + // 检查当前目录是否需要重命名 if (directoryInfo.Name.Contains(oldCompanyName) || directoryInfo.Name.Contains(oldProjectName) || directoryInfo.Name.Contains(oldModuleName)) { var oldDirectoryName = directoryInfo.Name; var newDirectoryName = oldDirectoryName.CustomReplace(oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, version, vben5); - var newDirectoryPath = Path.Combine(directoryInfo.Parent?.FullName, newDirectoryName); - if (directoryInfo.FullName != newDirectoryPath) - { - directoryInfo.MoveTo(newDirectoryPath); - } + directoriesToRename.Add((directoryInfo, newDirectoryPath)); } } }