in src/StructuredLogViewer.Avalonia/Controls/BuildControl.xaml.cs [913:962]
public bool DisplayTarget(string sourceFilePath, string targetName, string taskName = null)
{
var text = sourceFileResolver.GetSourceFileText(sourceFilePath);
if (text == null)
{
return false;
}
var xml = text.XmlRoot;
IXmlElement root = xml.Root;
int startPosition = 0;
int line = 0;
// work around a bug in Xml Parser where a virtual parent is created around the root element
// when the root element is preceded by trivia (comment)
if (root.Name == null && root.Elements.FirstOrDefault() is IXmlElement firstElement && firstElement.Name == "Project")
{
root = firstElement;
}
foreach (var element in root.Elements)
{
if (element.Name == "Target" && element.Attributes != null)
{
var nameAttribute = element.AsSyntaxElement.Attributes.FirstOrDefault(a => a.Name == "Name" && a.Value == targetName);
if (nameAttribute != null)
{
startPosition = nameAttribute.ValueNode.Start;
if (taskName != null)
{
var tasks = element.Elements.Where(e => e.Name == taskName).ToArray();
if (tasks.Length == 1)
{
startPosition = tasks[0].AsSyntaxElement.NameNode.Start;
}
}
break;
}
}
}
if (startPosition > 0)
{
line = text.GetLineNumberFromPosition(startPosition);
}
return DisplayFile(sourceFilePath, line + 1);
}