diff --git a/src/ILLink.Tasks/CreateRuntimeRootDescriptorFile.cs b/src/ILLink.Tasks/CreateRuntimeRootDescriptorFile.cs index 538baae4f0ff..8c0c04a38aa3 100644 --- a/src/ILLink.Tasks/CreateRuntimeRootDescriptorFile.cs +++ b/src/ILLink.Tasks/CreateRuntimeRootDescriptorFile.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Xml; using Microsoft.Build.Framework; // ITaskItem using Microsoft.Build.Utilities; // Task @@ -301,7 +302,10 @@ void OutputXml (string iLLinkTrimXmlFilePath, string outputFileName) XmlNode linkerNode = doc["linker"]; if (featureSwitchMembers.Count > 0) { - foreach (var fsMembers in featureSwitchMembers.Keys) { + foreach ((var fs, var members) in featureSwitchMembers.Select (kv => (kv.Key, kv.Value))) { + if (members.Count == 0) + continue; + // XmlNode featureAssemblyNode = doc.CreateElement ("assembly"); XmlAttribute featureAssemblyFullName = doc.CreateAttribute ("fullname"); @@ -309,18 +313,18 @@ void OutputXml (string iLLinkTrimXmlFilePath, string outputFileName) featureAssemblyNode.Attributes.Append (featureAssemblyFullName); XmlAttribute featureName = doc.CreateAttribute ("feature"); - featureName.Value = fsMembers.Feature; + featureName.Value = fs.Feature; featureAssemblyNode.Attributes.Append (featureName); XmlAttribute featureValue = doc.CreateAttribute ("featurevalue"); - featureValue.Value = fsMembers.FeatureValue; + featureValue.Value = fs.FeatureValue; featureAssemblyNode.Attributes.Append (featureValue); XmlAttribute featureDefault = doc.CreateAttribute ("featuredefault"); - featureDefault.Value = fsMembers.FeatureDefault; + featureDefault.Value = fs.FeatureDefault; featureAssemblyNode.Attributes.Append (featureDefault); - foreach (var type in featureSwitchMembers[fsMembers]) { + foreach (var type in members) { AddXmlTypeNode (doc, featureAssemblyNode, type.Key, type.Value); } linkerNode.AppendChild (featureAssemblyNode); diff --git a/test/ILLink.Tasks.Tests/CreateRuntimeRootDescriptorFileTests.cs b/test/ILLink.Tasks.Tests/CreateRuntimeRootDescriptorFileTests.cs index bc19b4c4d333..e317ce005448 100644 --- a/test/ILLink.Tasks.Tests/CreateRuntimeRootDescriptorFileTests.cs +++ b/test/ILLink.Tasks.Tests/CreateRuntimeRootDescriptorFileTests.cs @@ -131,6 +131,12 @@ public void TestCoreLibClassGenWithFeatureSwitch () "#if FOR_ILLINK", "DEFINE_METHOD(TESTCLASS, TESTMETHODFORILLINK, TestMethodForILLink, 5)", "#endif", + "END_ILLINK_FEATURE_SWITCH()", + "BEGIN_ILLINK_FEATURE_SWITCH(TestFeature2Name, false, false)", + "#ifdef FEATURE_OFF", + "DEFINE_CLASS(TESTCLASS)", + "DEFINE_METHOD(TESTCLASS, TESTMETHODFEATURE2, TestMethodFeature2, 6)", + "#endif", "END_ILLINK_FEATURE_SWITCH()" });