diff --git a/src/XMakeBuildEngine/Construction/ProjectRootElement.cs b/src/XMakeBuildEngine/Construction/ProjectRootElement.cs index 3060c0a9781..2af810ef0f3 100644 --- a/src/XMakeBuildEngine/Construction/ProjectRootElement.cs +++ b/src/XMakeBuildEngine/Construction/ProjectRootElement.cs @@ -157,6 +157,11 @@ public class ProjectRootElement : ProjectElementContainer /// private BuildEventContext _buildEventContext; + /// + /// Xpath expression that will find any element with the implicit attribute + /// + private static readonly string ImplicitAttributeXpath = $"//*[@{XMakeAttributes.@implicit}]"; + /// /// Initialize a ProjectRootElement instance from a XmlReader. /// May throw InvalidProjectFileException. @@ -1781,15 +1786,21 @@ public void Save(Encoding saveEncoding) private XmlDocument RemoveImplicits() { + if (XmlDocument.SelectSingleNode(ImplicitAttributeXpath) == null) + { + return XmlDocument; + } + var xmlWithNoImplicits = (XmlDocument) XmlDocument.CloneNode(deep: true); var implicitElements = - xmlWithNoImplicits.SelectNodes($"//*[@{XMakeAttributes.@implicit}]"); + xmlWithNoImplicits.SelectNodes(ImplicitAttributeXpath); foreach (XmlNode implicitElement in implicitElements) { implicitElement.ParentNode.RemoveChild(implicitElement); } + return xmlWithNoImplicits; }