Browse Source

Made RemoveProjectFromSolutionStep work with slnx files

pull/23822/head
Yunus Emre Kalkan 1 year ago
parent
commit
d718c2e952
  1. 93
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveProjectFromSolutionStep.cs

93
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveProjectFromSolutionStep.cs

@ -1,49 +1,110 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using System.Xml;
using Newtonsoft.Json.Linq;
using Volo.Abp.Cli.ProjectBuilding.Files;
using Formatting = Newtonsoft.Json.Formatting;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class RemoveProjectFromSolutionStep : ProjectBuildPipelineStep
{
private readonly string _projectName;
private string _solutionFilePath;
private string _solutionFilePathWithoutFileExtension;
private string _projectFolderPath;
private string ProjectNameWithQuotes => $"\"{_projectName}\"";
public RemoveProjectFromSolutionStep(
string projectName,
string solutionFilePath = null,
string solutionFilePathWithoutFileExtension = null,
string projectFolderPath = null)
{
_projectName = projectName;
_solutionFilePath = solutionFilePath;
_projectFolderPath = projectFolderPath;
if (solutionFilePathWithoutFileExtension != null && solutionFilePathWithoutFileExtension.EndsWith(".sln"))
{
_solutionFilePathWithoutFileExtension = solutionFilePathWithoutFileExtension.RemovePostFix(".sln");
}
else
{
_solutionFilePathWithoutFileExtension = solutionFilePathWithoutFileExtension;
}
}
public override void Execute(ProjectBuildContext context)
{
SetSolutionAndProjectPathsIfNull(context);
if (_solutionFilePath == null || _projectFolderPath == null)
if (_solutionFilePathWithoutFileExtension == null || _projectFolderPath == null)
{
return;
}
new RemoveFolderStep(_projectFolderPath).Execute(context);
var solutionFile = context.GetFile(_solutionFilePath);
solutionFile.NormalizeLineEndings();
solutionFile.SetLines(RemoveProject(solutionFile.GetLines().ToList()));
var solutionFile = context.FindFile(_solutionFilePathWithoutFileExtension + ".sln")
?? context.GetFile(_solutionFilePathWithoutFileExtension + ".slnx");
if (solutionFile.Name.EndsWith(".sln"))
{
RemoveProjectFromSlnFile(solutionFile);
}
else
{
RemoveProjectFromSlnxFile(solutionFile);
}
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)
{
var abpmdlFile = context.FindFile(_solutionFilePath.RemovePostFix(".slnx").RemovePostFix(".sln") + ".abpmdl");
var abpmdlFile = context.FindFile(_solutionFilePathWithoutFileExtension + ".abpmdl");
if (abpmdlFile == null)
{
@ -106,14 +167,14 @@ public class RemoveProjectFromSolutionStep : ProjectBuildPipelineStep
private void SetSolutionAndProjectPathsIfNull(ProjectBuildContext context)
{
if (_solutionFilePath == null)
if (_solutionFilePathWithoutFileExtension == null)
{
_solutionFilePath = context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.sln")?.Name ??
context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.slnx")?.Name ??
context.FindFile("/MyCompanyName.MyProjectName.sln")?.Name ??
context.FindFile("/MyCompanyName.MyProjectName.slnx")?.Name ??
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.sln")?.Name ??
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.slnx")?.Name;
_solutionFilePathWithoutFileExtension = context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.sln")?.Name.RemovePostFix(".sln") ??
context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.slnx")?.Name.RemovePostFix(".slnx") ??
context.FindFile("/MyCompanyName.MyProjectName.sln")?.Name.RemovePostFix(".sln") ??
context.FindFile("/MyCompanyName.MyProjectName.slnx")?.Name.RemovePostFix(".slnx") ??
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.sln")?.Name.RemovePostFix(".sln") ??
context.FindFile("/MyCompanyName.MyProjectName.MicroserviceName.slnx")?.Name.RemovePostFix(".slnx");
}
if (_projectFolderPath == null)
{

Loading…
Cancel
Save