Browse Source

#1408 Refactor NugetReferenceReplaceStep

pull/1418/head
Xeevis 7 years ago
parent
commit
4b2c6b23de
  1. 37
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/NugetReferenceReplaceStep.cs

37
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/NugetReferenceReplaceStep.cs

@ -1,8 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using HtmlAgilityPack; using System.Xml;
using Volo.Abp.Cli.ProjectBuilding.Files; using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
@ -49,28 +48,22 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{ {
Check.NotNull(content, nameof(content)); Check.NotNull(content, nameof(content));
var doc = new HtmlDocument(); var doc = new XmlDocument() { PreserveWhitespace = true };
doc.Load(GenerateStreamFromString(content)); doc.Load(GenerateStreamFromString(content));
var nodes = doc.DocumentNode.SelectNodes("//projectreference[@include]"); return ProcessReferenceNodes(doc, content);
if (nodes == null)
{
return content;
}
return ProcessReferenceNodes(nodes, content);
} }
private string ProcessReferenceNodes(HtmlNodeCollection nodes, string content) private string ProcessReferenceNodes(XmlDocument doc, string content)
{ {
Check.NotNull(nodes, nameof(nodes));
Check.NotNull(content, nameof(content)); Check.NotNull(content, nameof(content));
foreach (var node in nodes) var nodes = doc.SelectNodes("/Project/ItemGroup/ProjectReference[@Include]");
foreach (XmlNode node in nodes)
{ {
var valueAttr = node.Attributes.FirstOrDefault(a => a.Name.ToLower() == "include"); var valueAttr = node.Attributes["Include"];
// ReSharper disable once PossibleNullReferenceException : Can not be null because nodes are selected with include attribute filter in previous method // ReSharper disable once PossibleNullReferenceException : Can not be null because nodes are selected with include attribute filter in previous method
if (valueAttr.Value.Contains($"{_companyNamePlaceHolder}.{_projectNamePlaceHolder}")) if (valueAttr.Value.Contains($"{_companyNamePlaceHolder}.{_projectNamePlaceHolder}"))
@ -78,22 +71,20 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
continue; continue;
} }
var newValue = ConvertToNugetReference(valueAttr.Value); valueAttr.Value = ConvertToNugetReference(valueAttr.Value);
var oldLine = $"<ProjectReference Include=\"{valueAttr.Value}\""; var versionAttr = doc.CreateAttribute("Version");
var oldLineAlt = $"<ProjectReference Include=\"{valueAttr.Value}\""; versionAttr.Value = _latestNugetPackageVersion;
var newLine = $"<PackageReference Include=\"{newValue}\" Version=\"{_latestNugetPackageVersion}\"";
content = content.Replace(oldLine, newLine); node.Attributes.Append(versionAttr);
content = content.Replace(oldLineAlt, newLine);
} }
return content; return doc.OuterXml;
} }
private string ConvertToNugetReference(string oldValue) private string ConvertToNugetReference(string oldValue)
{ {
var newValue = Regex.Match(oldValue, @"\\((?!.+?\\).+?)\.csproj"); var newValue = Regex.Match(oldValue, @"\\((?!.+?\\).+?)\.csproj", RegexOptions.CultureInvariant | RegexOptions.Compiled);
if (newValue.Success && newValue.Groups.Count == 2) if (newValue.Success && newValue.Groups.Count == 2)
{ {
return newValue.Groups[1].Value; return newValue.Groups[1].Value;

Loading…
Cancel
Save