public static TestExclusionMap Create(BuildOptions options) { TestExclusionMap outputMap = new TestExclusionMap(); if (options.IssuesPath != null) { Dictionary <string, List <TestExclusion> > exclusionsByCondition = new Dictionary <string, List <TestExclusion> >(); foreach (FileInfo issuesProject in options.IssuesPath) { string issuesProjectPath = issuesProject.FullName; XDocument issuesXml = XDocument.Load(issuesProjectPath); foreach (XElement itemGroupElement in issuesXml.Root.Elements(s_xmlNamespace + "ItemGroup")) { string condition = itemGroupElement.Attribute("Condition")?.Value ?? ""; List <TestExclusion> exclusions; if (!exclusionsByCondition.TryGetValue(condition, out exclusions)) { exclusions = new List <TestExclusion>(); exclusionsByCondition.Add(condition, exclusions); } foreach (XElement excludeListElement in itemGroupElement.Elements(s_xmlNamespace + "ExcludeList")) { string testPath = excludeListElement.Attribute("Include")?.Value ?? ""; string issueID = excludeListElement.Element(s_xmlNamespace + "Issue")?.Value ?? "N/A"; exclusions.Add(CreateTestExclusion(testPath, issueID)); } } } Project project = new Project(); project.SetGlobalProperty("XunitTestBinBase", "*"); project.SetGlobalProperty("BuildArch", "x64"); // TODO: cross-OS CPAOT project.SetGlobalProperty("TargetsWindows", (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "true" : "false")); project.SetGlobalProperty("AltJitArch", "x64"); project.SetGlobalProperty("RunTestViaIlLink", "false"); ProjectRootElement root = project.Xml; root.AddTarget("GetListOfTestCmds"); ProjectPropertyGroupElement propertyGroup = root.AddPropertyGroup(); // Generate properties into the project to make it evaluate all conditions found in the targets file List <List <TestExclusion> > testExclusionLists = new List <List <TestExclusion> >(); testExclusionLists.Capacity = exclusionsByCondition.Count; foreach (KeyValuePair <string, List <TestExclusion> > kvp in exclusionsByCondition) { string propertyName = "Condition_" + testExclusionLists.Count.ToString(); bool emptyKey = string.IsNullOrEmpty(kvp.Key); propertyGroup.AddProperty(propertyName, emptyKey ? "true" : "false"); if (!emptyKey) { propertyGroup.AddProperty(propertyName, "true").Condition = kvp.Key; } testExclusionLists.Add(kvp.Value); } project.Build(); for (int exclusionListIndex = 0; exclusionListIndex < testExclusionLists.Count; exclusionListIndex++) { string conditionValue = project.GetProperty("Condition_" + exclusionListIndex.ToString()).EvaluatedValue; if (conditionValue.Equals("true", StringComparison.OrdinalIgnoreCase)) { foreach (TestExclusion exclusion in testExclusionLists[exclusionListIndex]) { outputMap.Add(exclusion); } } } } return(outputMap); }