|
|
@ -1,49 +1,110 @@ |
|
|
using System; |
|
|
using System; |
|
|
using System.Collections.Generic; |
|
|
using System.Collections.Generic; |
|
|
using System.Linq; |
|
|
using System.Linq; |
|
|
using Newtonsoft.Json; |
|
|
using System.Xml; |
|
|
using Newtonsoft.Json.Linq; |
|
|
using Newtonsoft.Json.Linq; |
|
|
|
|
|
using Volo.Abp.Cli.ProjectBuilding.Files; |
|
|
|
|
|
using Formatting = Newtonsoft.Json.Formatting; |
|
|
|
|
|
|
|
|
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps; |
|
|
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps; |
|
|
|
|
|
|
|
|
public class RemoveProjectFromSolutionStep : ProjectBuildPipelineStep |
|
|
public class RemoveProjectFromSolutionStep : ProjectBuildPipelineStep |
|
|
{ |
|
|
{ |
|
|
private readonly string _projectName; |
|
|
private readonly string _projectName; |
|
|
private string _solutionFilePath; |
|
|
private string _solutionFilePathWithoutFileExtension; |
|
|
private string _projectFolderPath; |
|
|
private string _projectFolderPath; |
|
|
|
|
|
|
|
|
private string ProjectNameWithQuotes => $"\"{_projectName}\""; |
|
|
private string ProjectNameWithQuotes => $"\"{_projectName}\""; |
|
|
|
|
|
|
|
|
public RemoveProjectFromSolutionStep( |
|
|
public RemoveProjectFromSolutionStep( |
|
|
string projectName, |
|
|
string projectName, |
|
|
string solutionFilePath = null, |
|
|
string solutionFilePathWithoutFileExtension = null, |
|
|
string projectFolderPath = null) |
|
|
string projectFolderPath = null) |
|
|
{ |
|
|
{ |
|
|
_projectName = projectName; |
|
|
_projectName = projectName; |
|
|
_solutionFilePath = solutionFilePath; |
|
|
|
|
|
_projectFolderPath = projectFolderPath; |
|
|
_projectFolderPath = projectFolderPath; |
|
|
|
|
|
|
|
|
|
|
|
if (solutionFilePathWithoutFileExtension != null && solutionFilePathWithoutFileExtension.EndsWith(".sln")) |
|
|
|
|
|
{ |
|
|
|
|
|
_solutionFilePathWithoutFileExtension = solutionFilePathWithoutFileExtension.RemovePostFix(".sln"); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
_solutionFilePathWithoutFileExtension = solutionFilePathWithoutFileExtension; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public override void Execute(ProjectBuildContext context) |
|
|
public override void Execute(ProjectBuildContext context) |
|
|
{ |
|
|
{ |
|
|
SetSolutionAndProjectPathsIfNull(context); |
|
|
SetSolutionAndProjectPathsIfNull(context); |
|
|
|
|
|
|
|
|
if (_solutionFilePath == null || _projectFolderPath == null) |
|
|
if (_solutionFilePathWithoutFileExtension == null || _projectFolderPath == null) |
|
|
{ |
|
|
{ |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
new RemoveFolderStep(_projectFolderPath).Execute(context); |
|
|
new RemoveFolderStep(_projectFolderPath).Execute(context); |
|
|
var solutionFile = context.GetFile(_solutionFilePath); |
|
|
var solutionFile = context.FindFile(_solutionFilePathWithoutFileExtension + ".sln") |
|
|
solutionFile.NormalizeLineEndings(); |
|
|
?? context.GetFile(_solutionFilePathWithoutFileExtension + ".slnx"); |
|
|
solutionFile.SetLines(RemoveProject(solutionFile.GetLines().ToList())); |
|
|
|
|
|
|
|
|
if (solutionFile.Name.EndsWith(".sln")) |
|
|
|
|
|
{ |
|
|
|
|
|
RemoveProjectFromSlnFile(solutionFile); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
RemoveProjectFromSlnxFile(solutionFile); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
RemoveProjectFromAbpmdlFile(context); |
|
|
RemoveProjectFromAbpmdlFile(context); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void RemoveProjectFromSlnxFile(FileEntry solutionFile) |
|
|
|
|
|
{ |
|
|
|
|
|
var document = new XmlDocument { PreserveWhitespace = true }; |
|
|
|
|
|
document.LoadXml(solutionFile.Content); |
|
|
|
|
|
var projectNodes = document.SelectNodes("/Solution/Folder/Project"); |
|
|
|
|
|
|
|
|
|
|
|
if (projectNodes == null || projectNodes.Count < 1) |
|
|
|
|
|
{ |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var nodesToBeRemoved = new List<XmlNode>(); |
|
|
|
|
|
foreach (XmlNode projectNode in projectNodes) |
|
|
|
|
|
{ |
|
|
|
|
|
var pathAttr = projectNode.Attributes?["Path"]?.Value; |
|
|
|
|
|
if (string.IsNullOrWhiteSpace(pathAttr)) |
|
|
|
|
|
{ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var normalized = pathAttr.Replace('\\', '/'); |
|
|
|
|
|
var fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(normalized); |
|
|
|
|
|
|
|
|
|
|
|
if (string.Equals(fileNameWithoutExtension, _projectName, StringComparison.OrdinalIgnoreCase)) |
|
|
|
|
|
{ |
|
|
|
|
|
nodesToBeRemoved.Add(projectNode); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
foreach (var node in nodesToBeRemoved) |
|
|
|
|
|
{ |
|
|
|
|
|
node.ParentNode!.RemoveChild(node); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
solutionFile.SetContent(document.OuterXml); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void RemoveProjectFromSlnFile(FileEntry solutionFile) |
|
|
|
|
|
{ |
|
|
|
|
|
solutionFile.NormalizeLineEndings(); |
|
|
|
|
|
solutionFile.SetLines(RemoveProject(solutionFile.GetLines().ToList())); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private void RemoveProjectFromAbpmdlFile(ProjectBuildContext context) |
|
|
private void RemoveProjectFromAbpmdlFile(ProjectBuildContext context) |
|
|
{ |
|
|
{ |
|
|
var abpmdlFile = context.FindFile(_solutionFilePath.RemovePostFix(".slnx").RemovePostFix(".sln") + ".abpmdl"); |
|
|
var abpmdlFile = context.FindFile(_solutionFilePathWithoutFileExtension + ".abpmdl"); |
|
|
|
|
|
|
|
|
if (abpmdlFile == null) |
|
|
if (abpmdlFile == null) |
|
|
{ |
|
|
{ |
|
|
@ -106,14 +167,14 @@ public class RemoveProjectFromSolutionStep : ProjectBuildPipelineStep |
|
|
|
|
|
|
|
|
private void SetSolutionAndProjectPathsIfNull(ProjectBuildContext context) |
|
|
private void SetSolutionAndProjectPathsIfNull(ProjectBuildContext context) |
|
|
{ |
|
|
{ |
|
|
if (_solutionFilePath == null) |
|
|
if (_solutionFilePathWithoutFileExtension == null) |
|
|
{ |
|
|
{ |
|
|
_solutionFilePath = context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.sln")?.Name ?? |
|
|
_solutionFilePathWithoutFileExtension = context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.sln")?.Name.RemovePostFix(".sln") ?? |
|
|
context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.slnx")?.Name ?? |
|
|
context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.slnx")?.Name.RemovePostFix(".slnx") ?? |
|
|
context.FindFile("/MyCompanyName.MyProjectName.sln")?.Name ?? |
|
|
context.FindFile("/MyCompanyName.MyProjectName.sln")?.Name.RemovePostFix(".sln") ?? |
|
|
context.FindFile("/MyCompanyName.MyProjectName.slnx")?.Name ?? |
|
|
context.FindFile("/MyCompanyName.MyProjectName.slnx")?.Name.RemovePostFix(".slnx") ?? |
|
|
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.sln")?.Name ?? |
|
|
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.sln")?.Name.RemovePostFix(".sln") ?? |
|
|
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.slnx")?.Name; |
|
|
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.slnx")?.Name.RemovePostFix(".slnx"); |
|
|
} |
|
|
} |
|
|
if (_projectFolderPath == null) |
|
|
if (_projectFolderPath == null) |
|
|
{ |
|
|
{ |
|
|
|