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); } }
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(); }