in src/StructuredLogViewer.Core/PreprocessedFileManager.cs [193:256]
private string GetPreprocessedTextCore(string projectEvaluationContext, SourceText sourceText, Bucket imports)
{
string result;
var sb = new StringBuilder();
int line = 0;
if (sourceText.GetLineText(line).Contains("<?xml"))
{
line++;
}
var importsList = imports.OrderBy(i => i.Line).ToList();
var sdkProps = importsList.FirstOrDefault(i => i.ProjectPath.EndsWith("Sdk.props", StringComparison.OrdinalIgnoreCase) && i.Line == 0 && i.Column == 0);
if (sdkProps != default)
{
while (sourceText.GetLineText(line) is string firstLine && !firstLine.Contains("<Project"))
{
sb.AppendLine(firstLine);
line++;
}
line = SkipTag(sourceText, sb, line, line, "<Project", ">");
InjectImportedProject(projectEvaluationContext, sb, sdkProps);
importsList.Remove(sdkProps);
}
var sdkTargets = importsList.FirstOrDefault(i => i.ProjectPath.EndsWith("Sdk.targets", StringComparison.OrdinalIgnoreCase) && i.Line == 0 && i.Column == 0);
if (sdkTargets != default)
{
importsList.Remove(sdkTargets);
}
foreach (var import in importsList)
{
line = SkipTag(sourceText, sb, line, import.Line);
InjectImportedProject(projectEvaluationContext, sb, import);
}
int count = sourceText.Lines.Count;
for (; line < count; line++)
{
var lastLineText = sourceText.GetLineText(line);
if (lastLineText.Contains("</Project>"))
{
if (sdkTargets != default)
{
InjectImportedProject(projectEvaluationContext, sb, sdkTargets);
sdkTargets = default;
}
}
if (line < count - 1 || lastLineText.Length > 0)
{
sb.AppendLine(lastLineText);
}
}
result = sb.ToString();
return result;
}