Example #1
0
        internal override void ReadChildElement(MSBuildXmlReader reader)
        {
            MSBuildObject ob = null;

            switch (reader.LocalName)
            {
            case "ItemGroup": ob = new MSBuildItemGroup(); break;

            case "PropertyGroup": ob = new MSBuildPropertyGroup(); break;

            case "ImportGroup": ob = new MSBuildImportGroup(); break;

            case "Import": ob = new MSBuildImport(); break;

            case "Target": ob = new MSBuildTarget(); break;

            case "Choose": ob = new MSBuildChoose(); break;

            case "ProjectExtensions": ob = new MSBuildProjectExtensions(); break;

            case "Sdk": ob = new MSBuildSdk(); break;

            default: ob = new MSBuildXmlElement(); break;
            }
            if (ob != null)
            {
                ob.ParentNode = this;
                ob.Read(reader);
                ChildNodes = ChildNodes.Add(ob);
            }
            else
            {
                base.ReadChildElement(reader);
            }
        }
Example #2
0
        void GenerateSdkArray()
        {
            // Sdks that are defined explicitly
            var explicitSdks = new HashSet <string> ();
            // Only defines the sdks that require an implicit import (Project node or Sdk node)
            var implicitSdks = new HashSet <string> ();

            if (Sdk != null)
            {
                foreach (string sdk in Sdk.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
                         .Select(x => x.Trim())
                         .Where(x => x.Length > 0))
                {
                    implicitSdks.Add(sdk);
                }
            }

            MSBuildSdk sdkNode = GetChildren().OfType <MSBuildSdk> ().FirstOrDefault();

            if (sdkNode != null && !string.IsNullOrEmpty(sdkNode.Name))
            {
                // Sdk node defines name and version separately
                string version = "";
                if (!string.IsNullOrEmpty(sdkNode.Version))
                {
                    version = $"/{sdkNode.Version}";
                }
                string sdkName = $"{sdkNode.Name}{version}";
                implicitSdks.Add(sdkName);
            }

            // Check all import nodes for other sdks
            foreach (MSBuildImport import in ImportGroups.SelectMany(x => x.Imports).Concat(Imports))
            {
                if (!string.IsNullOrEmpty(import.Sdk))
                {
                    explicitSdks.Add(import.Sdk);
                }
            }

            explicitSdkArray = explicitSdks.ToArray();
            implicitSdkArray = implicitSdks.Where(x => !explicitSdks.Contains(x)).ToArray();
            sdkArray         = explicitSdks.Concat(implicitSdks).ToArray();
        }