Browse Source

added ReplaceCommonPropsStep

pull/1822/head
Yunus Emre Kalkan 7 years ago
parent
commit
88025ddac7
  1. 1
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleProjectBuildPipelineBuilder.cs
  2. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs
  3. 96
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceCommonPropsStep.cs

1
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleProjectBuildPipelineBuilder.cs

@ -10,6 +10,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building
pipeline.Steps.Add(new FileEntryListReadStep());
pipeline.Steps.Add(new ProjectReferenceReplaceStep());
pipeline.Steps.Add(new ReplaceCommonPropsStep());
pipeline.Steps.Add(new CreateProjectResultZipStep());
return pipeline;

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs

@ -22,7 +22,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
new ProjectReferenceReplacer.LocalProjectPathReferenceReplacer(
context.Files,
context.Module.Namespace,
context.Module?.Namespace ?? "MyCompanyName.MyProjectName",
localAbpRepoPath
).Run();
}
@ -37,7 +37,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
new ProjectReferenceReplacer.NugetReferenceReplacer(
context.Files,
"MyCompanyName.MyProjectName",
context.Module?.Namespace ?? "MyCompanyName.MyProjectName",
nugetPackageVersion
).Run();
}
@ -108,7 +108,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
var oldNodeIncludeValue = oldNode.Attributes["Include"].Value;
// ReSharper disable once PossibleNullReferenceException : Can not be null because nodes are selected with include attribute filter in previous method
if (oldNodeIncludeValue.Contains($"{_projectName}"))
if (oldNodeIncludeValue.Contains(_projectName))
{
continue;
}

96
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceCommonPropsStep.cs

@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class ReplaceCommonPropsStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
new CommonPropsReplacer(context.Files).Run();
}
private class CommonPropsReplacer
{
private readonly List<FileEntry> _entries;
public CommonPropsReplacer(
List<FileEntry> entries)
{
_entries = entries;
}
public void Run()
{
foreach (var fileEntry in _entries)
{
if (fileEntry.Name.EndsWith(".csproj"))
{
fileEntry.SetContent(ProcessFileContent(fileEntry.Content));
}
}
}
private string ProcessFileContent(string content)
{
Check.NotNull(content, nameof(content));
var doc = new XmlDocument() { PreserveWhitespace = true };
doc.Load(GenerateStreamFromString(content));
return ProcessReferenceNodes(doc, content);
}
private string ProcessReferenceNodes(XmlDocument doc, string content)
{
Check.NotNull(content, nameof(content));
var importNodes = doc.SelectNodes("/Project/Import[@Project]");
if (importNodes == null)
{
return doc.OuterXml;
}
foreach (XmlNode node in importNodes)
{
if (!(node.Attributes?["Project"]?.Value?.EndsWith("\\common.props") ?? false))
{
continue;
}
node.ParentNode?.RemoveChild(node);
}
var propertyGroupNodes = doc.SelectNodes("/Project/PropertyGroup");
if (propertyGroupNodes == null || propertyGroupNodes.Count < 1)
{
return doc.OuterXml;
}
var firstPropertyGroupNode = propertyGroupNodes.Item(0);
var langNode = doc.CreateElement("LangVersion");
langNode.InnerText = "latest";
firstPropertyGroupNode?.PrependChild(langNode);
return doc.OuterXml;
}
private static Stream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
}
}
}
Loading…
Cancel
Save