Browse Source

Merge pull request #8687 from abpframework/cli-add-module-improvement

Cli add-module: ensure to keep projects that are referenced by other module
pull/8717/head
Alper Ebicoglu 6 years ago
committed by GitHub
parent
commit
917e0e5b5e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 75
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs

75
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs

@ -186,6 +186,7 @@ namespace Volo.Abp.Cli.ProjectModification
private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module,
string[] projectFiles) string[] projectFiles)
{ {
var projectsToRemove = new List<string>();
var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name); var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name);
var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First();
var isProjectTiered = await IsProjectTiered(projectFiles); var isProjectTiered = await IsProjectTiered(projectFiles);
@ -194,10 +195,10 @@ namespace Volo.Abp.Cli.ProjectModification
var blazorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".Blazor.csproj")); var blazorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".Blazor.csproj"));
if (blazorProject == null) if (blazorProject == null)
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.Blazor, isProjectTiered));
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorServer, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorServer, isProjectTiered));
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered));
await RemoveProjectByPostFix(module, moduleSolutionFile, "src", ".Blazor"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "src", ".Blazor"));
} }
else else
{ {
@ -205,39 +206,58 @@ namespace Volo.Abp.Cli.ProjectModification
if (isBlazorServer) if (isBlazorServer)
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered));
webPackagesWillBeAddedToBlazorServerProject = module.NugetPackages.All(np=> np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer); webPackagesWillBeAddedToBlazorServerProject = module.NugetPackages.All(np=> np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer);
} }
else else
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorServer, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.BlazorServer, isProjectTiered));
} }
} }
if (!projectFiles.Any(p => p.EndsWith(".Web.csproj")) && !webPackagesWillBeAddedToBlazorServerProject) if (!projectFiles.Any(p => p.EndsWith(".Web.csproj")) && !webPackagesWillBeAddedToBlazorServerProject)
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Web, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.Web, isProjectTiered));
} }
if (!projectFiles.Any(p => p.EndsWith(".MongoDB.csproj"))) if (!projectFiles.Any(p => p.EndsWith(".MongoDB.csproj")))
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.MongoDB, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.MongoDB, isProjectTiered));
await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".MongoDB.Tests"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".MongoDB.Tests"));
} }
if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj"))) if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj")))
{ {
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered); projectsToRemove.AddRange(await FindProjectsToRemoveByTarget(module, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered));
await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".EntityFrameworkCore.Tests"));
await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".Application.Tests"); projectsToRemove.AddRange(await FindProjectsToRemoveByPostFix(moduleDirectory, "test", ".Application.Tests"));
ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile); ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile);
} }
foreach (var projectToRemove in projectsToRemove)
{
if (IsReferencedByAnotherModuleProject(moduleDirectory, projectsToRemove, projectToRemove))
{
continue;
}
RemoveProjectFromSolutionAsync(moduleSolutionFile, projectToRemove);
}
} }
private async Task RemoveProjectByTarget(ModuleWithMastersInfo module, string moduleSolutionFile, private bool IsReferencedByAnotherModuleProject(string moduleDirectory, List<string> projectsToRemove, string projectToRemove)
{
var moduleProjects = Directory.GetFiles(moduleDirectory, "*.csproj", SearchOption.AllDirectories);
var projectsToKeep = moduleProjects.Where(mp=> !projectsToRemove.Contains(Path.GetFileName(mp).RemovePostFix(".csproj"))).ToList();
return projectsToKeep.Select(File.ReadAllText).Any(content => content.Contains($"\"{projectToRemove}\""));
}
private async Task<List<string>> FindProjectsToRemoveByTarget(ModuleWithMastersInfo module,
NuGetPackageTarget target, bool isTieredProject) NuGetPackageTarget target, bool isTieredProject)
{ {
var projectsToRemove = new List<string>();
var packages = module.NugetPackages.Where(n => var packages = module.NugetPackages.Where(n =>
(isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined (isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined
? n.TieredTarget ? n.TieredTarget
@ -251,37 +271,42 @@ namespace Volo.Abp.Cli.ProjectModification
continue; continue;
} }
await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, package.Name); projectsToRemove.Add(package.Name);
var projectPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", package.Name);
if (Directory.Exists(projectPath))
{
Directory.Delete(projectPath, true);
}
} }
return projectsToRemove;
} }
private async Task RemoveProjectByPostFix(ModuleWithMastersInfo module, string moduleSolutionFile, string targetFolder, private async Task<List<string>> FindProjectsToRemoveByPostFix(string moduleDirectory, string targetFolder,
string postFix) string postFix)
{ {
var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder); var projectsToRemove = new List<string>();
var srcPath = Path.Combine(moduleDirectory, targetFolder);
if (!Directory.Exists(srcPath)) if (!Directory.Exists(srcPath))
{ {
return; return projectsToRemove;
} }
var projectFolderPaths = Directory.GetDirectories(srcPath).Where(d => d.EndsWith(postFix)).ToList(); var projectFolderPaths = Directory.GetDirectories(srcPath).Where(d => d.EndsWith(postFix)).ToList();
foreach (var projectFolderPath in projectFolderPaths) foreach (var projectFolderPath in projectFolderPaths)
{ {
await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, new DirectoryInfo(projectFolderPath).Name); projectsToRemove.Add(new DirectoryInfo(projectFolderPath).Name);
}
return projectsToRemove;
}
private async Task RemoveProjectFromSolutionAsync(string moduleSolutionFile, string projectName)
{
await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, projectName);
var projectFolderPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", projectName);
if (Directory.Exists(projectFolderPath)) if (Directory.Exists(projectFolderPath))
{ {
Directory.Delete(projectFolderPath, true); Directory.Delete(projectFolderPath, true);
} }
}
} }
private void ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile) private void ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile)

Loading…
Cancel
Save