Skip to content

Commit 4b2c6b2

Browse files
committed
abpframework#1408 Refactor NugetReferenceReplaceStep
1 parent 309c5f3 commit 4b2c6b2

File tree

1 file changed

+14
-23
lines changed

1 file changed

+14
-23
lines changed

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

+14-23
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
using System.Collections.Generic;
22
using System.IO;
3-
using System.Linq;
43
using System.Text.RegularExpressions;
5-
using HtmlAgilityPack;
4+
using System.Xml;
65
using Volo.Abp.Cli.ProjectBuilding.Files;
76

87
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
@@ -49,51 +48,43 @@ private string ProcessFileContent(string content)
4948
{
5049
Check.NotNull(content, nameof(content));
5150

52-
var doc = new HtmlDocument();
51+
var doc = new XmlDocument() { PreserveWhitespace = true };
5352

5453
doc.Load(GenerateStreamFromString(content));
5554

56-
var nodes = doc.DocumentNode.SelectNodes("//projectreference[@include]");
57-
58-
if (nodes == null)
59-
{
60-
return content;
61-
}
62-
63-
return ProcessReferenceNodes(nodes, content);
55+
return ProcessReferenceNodes(doc, content);
6456
}
6557

66-
private string ProcessReferenceNodes(HtmlNodeCollection nodes, string content)
58+
private string ProcessReferenceNodes(XmlDocument doc, string content)
6759
{
68-
Check.NotNull(nodes, nameof(nodes));
6960
Check.NotNull(content, nameof(content));
7061

71-
foreach (var node in nodes)
62+
var nodes = doc.SelectNodes("/Project/ItemGroup/ProjectReference[@Include]");
63+
64+
foreach (XmlNode node in nodes)
7265
{
73-
var valueAttr = node.Attributes.FirstOrDefault(a => a.Name.ToLower() == "include");
66+
var valueAttr = node.Attributes["Include"];
7467

7568
// ReSharper disable once PossibleNullReferenceException : Can not be null because nodes are selected with include attribute filter in previous method
7669
if (valueAttr.Value.Contains($"{_companyNamePlaceHolder}.{_projectNamePlaceHolder}"))
7770
{
7871
continue;
7972
}
8073

81-
var newValue = ConvertToNugetReference(valueAttr.Value);
74+
valueAttr.Value = ConvertToNugetReference(valueAttr.Value);
8275

83-
var oldLine = $"<ProjectReference Include=\"{valueAttr.Value}\"";
84-
var oldLineAlt = $"<ProjectReference Include=\"{valueAttr.Value}\"";
85-
var newLine = $"<PackageReference Include=\"{newValue}\" Version=\"{_latestNugetPackageVersion}\"";
76+
var versionAttr = doc.CreateAttribute("Version");
77+
versionAttr.Value = _latestNugetPackageVersion;
8678

87-
content = content.Replace(oldLine, newLine);
88-
content = content.Replace(oldLineAlt, newLine);
79+
node.Attributes.Append(versionAttr);
8980
}
9081

91-
return content;
82+
return doc.OuterXml;
9283
}
9384

9485
private string ConvertToNugetReference(string oldValue)
9586
{
96-
var newValue = Regex.Match(oldValue, @"\\((?!.+?\\).+?)\.csproj");
87+
var newValue = Regex.Match(oldValue, @"\\((?!.+?\\).+?)\.csproj", RegexOptions.CultureInvariant | RegexOptions.Compiled);
9788
if (newValue.Success && newValue.Groups.Count == 2)
9889
{
9990
return newValue.Groups[1].Value;

0 commit comments

Comments
 (0)