chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Xml.Linq;
using Microsoft.Build.Execution;
 
namespace Keysight.OpenTap.Sdk.MSBuild
{
    internal static class ExtensionClass
    {
        internal static string ElemOrAttributeValue(this XElement ele, string name, string defaultValue)
        {
            return ele.Attribute(name)?.Value ?? ele.Element(name)?.Value ?? defaultValue;
        }
 
        internal static XElement[] GetPackageElements(this XElement ele, string packageName)
        {
            var tagNames = new[] { "OpenTapPackageReference", "AdditionalOpenTapPackage" };
 
            var itemGroups = ele.Elements().Where(e => e.Name.LocalName == "ItemGroup");
            var packageInstallElements = new List<XElement>();
 
            foreach (var itemGroup in itemGroups)
            {
                var packageElems = itemGroup.Elements().Where(e => tagNames.Contains(e.Name.LocalName));
                packageElems = packageElems.Where(e => e?.Attribute("Include")?.Value == packageName);
                packageInstallElements.AddRange(packageElems);
            }
 
            return packageInstallElements.ToArray();
        }
    }
 
    internal class BuildVariableExpander
    {
 
        private readonly ProjectInstance _projectInstance;
        private const string Pattern = @"\$\(.*?\)";
 
        internal BuildVariableExpander(string sourceFile)
        {
            _projectInstance = new ProjectInstance(sourceFile);
        }
 
        internal string ExpandBuildVariables(string input)
        {
            var matches = Regex.Matches(input, Pattern);
            
            foreach (Match match in matches)
            {
                // $(VarName) -> VarName
                var matchName = match.Value.Substring(2, match.Value.Length - 3);
                
                // Expand to csproj variable if available, otherwise expand to environment variable
                var varValue = _projectInstance.GetProperty(matchName)?.EvaluatedValue ??
                               Environment.GetEnvironmentVariable(matchName) ?? "";
                input = input.Replace(match.Value, varValue);
            }
 
            return input;
        }
    }
}