Browse Source

Merge pull request #24697 from abpframework/SolutionFileModifier

Fix project file filtering and solution command execution
pull/24713/head
Yunus Emre Kalkan 2 weeks ago
committed by GitHub
parent
commit
ea9a027ba1
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 12
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/DerivedClassFinder.cs
  2. 26
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs

12
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/DerivedClassFinder.cs

@ -26,10 +26,10 @@ public class DerivedClassFinder : ITransientDependency
var binFile = Path.Combine(csprojFileDirectory, "bin"); var binFile = Path.Combine(csprojFileDirectory, "bin");
var objFile = Path.Combine(csprojFileDirectory, "obj"); var objFile = Path.Combine(csprojFileDirectory, "obj");
var csFiles = new DirectoryInfo(csprojFileDirectory) var csFiles = new DirectoryInfo(csprojFileDirectory)
.GetFiles("*.cs", SearchOption.AllDirectories) .GetFiles("*.cs", SearchOption.AllDirectories)
.Where(f => f.DirectoryName != null && (!f.DirectoryName.StartsWith(binFile) || !f.DirectoryName.StartsWith(objFile))) .Where(f => !f.FullName.StartsWith(binFile, StringComparison.OrdinalIgnoreCase) &&
!f.FullName.StartsWith(objFile, StringComparison.OrdinalIgnoreCase))
.Select(f => f.FullName) .Select(f => f.FullName)
.ToList(); .ToList();
@ -53,7 +53,13 @@ public class DerivedClassFinder : ITransientDependency
protected bool IsDerived(string csFile, string baseClass) protected bool IsDerived(string csFile, string baseClass)
{ {
var root = CSharpSyntaxTree.ParseText(File.ReadAllText(csFile)).GetRoot(); var csFileText = File.ReadAllText(csFile);
if (!csFileText.Contains("class"))
{
return false;
}
var root = CSharpSyntaxTree.ParseText(csFileText).GetRoot();
var namespaceSyntax = root.DescendantNodes().OfType<NamespaceDeclarationSyntax>().FirstOrDefault(); var namespaceSyntax = root.DescendantNodes().OfType<NamespaceDeclarationSyntax>().FirstOrDefault();
var classDeclaration = (namespaceSyntax?.DescendantNodes().OfType<ClassDeclarationSyntax>())?.FirstOrDefault(); var classDeclaration = (namespaceSyntax?.DescendantNodes().OfType<ClassDeclarationSyntax>())?.FirstOrDefault();

26
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs

@ -18,16 +18,17 @@ public class SolutionFileModifier : ITransientDependency
{ {
_cmdHelper = cmdHelper; _cmdHelper = cmdHelper;
} }
public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName) public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName)
{ {
var list = _cmdHelper.RunCmdAndGetOutput($"dotnet sln \"{solutionFile}\" list"); var workingDirectory = Path.GetDirectoryName(solutionFile);
var list = _cmdHelper.RunCmdAndGetOutput($"dotnet sln \"{solutionFile}\" list", workingDirectory: workingDirectory);
foreach (var line in list.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None)) foreach (var line in list.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None))
{ {
if (Path.GetFileNameWithoutExtension(line.Trim()).Equals(projectName, StringComparison.InvariantCultureIgnoreCase)) if (Path.GetFileNameWithoutExtension(line.Trim()).Equals(projectName, StringComparison.InvariantCultureIgnoreCase))
{ {
_cmdHelper.RunCmd($"dotnet sln \"{solutionFile}\" remove \"{line.Trim()}\""); _cmdHelper.RunCmd($"dotnet sln \"{solutionFile}\" remove \"{line.Trim()}\"", workingDirectory: workingDirectory);
break; break;
} }
} }
@ -50,30 +51,27 @@ public class SolutionFileModifier : ITransientDependency
private async Task AddModuleAsync(ModuleWithMastersInfo module, string solutionFile) private async Task AddModuleAsync(ModuleWithMastersInfo module, string solutionFile)
{ {
var slnDir = Path.GetDirectoryName(solutionFile);
var projectsUnderModule = Directory.GetFiles( var projectsUnderModule = Directory.GetFiles(
Path.Combine(Path.GetDirectoryName(solutionFile), "modules", module.Name), Path.Combine(slnDir, "modules", module.Name),
"*.csproj", "*.csproj",
SearchOption.AllDirectories); SearchOption.AllDirectories);
var projectsUnderTest = new List<string>(); var projectsUnderTest = new List<string>();
if (Directory.Exists(Path.Combine(Path.GetDirectoryName(solutionFile), "modules", module.Name, "test"))) if (Directory.Exists(Path.Combine(slnDir, "modules", module.Name, "test")))
{ {
projectsUnderTest = Directory.GetFiles( projectsUnderTest = Directory.GetFiles(
Path.Combine(Path.GetDirectoryName(solutionFile), "modules", module.Name, "test"), Path.Combine(slnDir, "modules", module.Name, "test"),
"*.csproj", "*.csproj",
SearchOption.AllDirectories).ToList(); SearchOption.AllDirectories).ToList();
} }
foreach (var projectPath in projectsUnderModule) foreach (var projectPath in projectsUnderModule)
{ {
var folder = projectsUnderTest.Contains(projectPath) ? "test" : "src"; var solutionFolder = projectsUnderTest.Contains(projectPath) ? Path.Combine("test", module.Name) : Path.Combine("modules", module.Name);
_cmdHelper.RunCmd($"dotnet sln \"{solutionFile}\" add \"{projectPath}\" --solution-folder \"{solutionFolder}\"", workingDirectory: slnDir);
var projectId = Path.GetFileName(projectPath).Replace(".csproj", "");
var package = @$"modules\{module.Name}\{folder}\{projectId}\{projectId}.csproj";
_cmdHelper.RunCmd($"dotnet sln \"{solutionFile}\" add \"{package}\" --solution-folder {folder}");
} }
if (module.MasterModuleInfos != null) if (module.MasterModuleInfos != null)
{ {
foreach (var masterModule in module.MasterModuleInfos) foreach (var masterModule in module.MasterModuleInfos)

Loading…
Cancel
Save