private bool UpdateRunSettingsIfRequired(string runsettingsXml, List <string> sources, out string updatedRunSettingsXml) { bool settingsUpdated = false; updatedRunSettingsXml = runsettingsXml; IDictionary <string, Architecture> sourcePlatforms = new Dictionary <string, Architecture>(); IDictionary <string, Framework> sourceFrameworks = new Dictionary <string, Framework>(); if (!string.IsNullOrEmpty(runsettingsXml)) { // TargetFramework is full CLR. Set DesignMode based on current context. using (var stream = new StringReader(runsettingsXml)) using (var reader = XmlReader.Create(stream, XmlRunSettingsUtilities.ReaderSettings)) { var document = new XmlDocument(); document.Load(reader); var navigator = document.CreateNavigator(); var inferedFramework = inferHelper.AutoDetectFramework(sources, sourceFrameworks); Framework chosenFramework; var inferedPlatform = inferHelper.AutoDetectArchitecture(sources, sourcePlatforms); Architecture chosenPlatform; // Update frmaework and platform if required. For commandline scenario update happens in ArgumentProcessor. bool updateFramework = IsAutoFrameworkDetectRequired(navigator, out chosenFramework); bool updatePlatform = IsAutoPlatformDetectRequired(navigator, out chosenPlatform); if (updateFramework) { InferRunSettingsHelper.UpdateTargetFramework(document, inferedFramework?.ToString(), overwrite: true); chosenFramework = inferedFramework; settingsUpdated = true; } if (updatePlatform) { InferRunSettingsHelper.UpdateTargetPlatform(document, inferedPlatform.ToString(), overwrite: true); chosenPlatform = inferedPlatform; settingsUpdated = true; } var compatibleSources = InferRunSettingsHelper.FilterCompatibleSources(chosenPlatform, chosenFramework, sourcePlatforms, sourceFrameworks, out var incompatibleSettingWarning); if (!string.IsNullOrEmpty(incompatibleSettingWarning)) { EqtTrace.Info(incompatibleSettingWarning); LoggerUtilities.RaiseTestRunWarning(this.testLoggerManager, this.testRunResultAggregator, incompatibleSettingWarning); } if (EqtTrace.IsInfoEnabled) { EqtTrace.Info("Compatible sources list : "); EqtTrace.Info(string.Join("\n", compatibleSources.ToArray())); } // If user is already setting DesignMode via runsettings or CLI args; we skip. var runConfiguration = XmlRunSettingsUtilities.GetRunConfigurationNode(runsettingsXml); if (!runConfiguration.DesignModeSet) { InferRunSettingsHelper.UpdateDesignMode(document, this.commandLineOptions.IsDesignMode); settingsUpdated = true; } if (!runConfiguration.CollectSourceInformationSet) { InferRunSettingsHelper.UpdateCollectSourceInformation(document, this.commandLineOptions.ShouldCollectSourceInformation); settingsUpdated = true; } if (InferRunSettingsHelper.TryGetDeviceXml(navigator, out string deviceXml)) { InferRunSettingsHelper.UpdateTargetDevice(document, deviceXml); settingsUpdated = true; } updatedRunSettingsXml = navigator.OuterXml; } } return(settingsUpdated); }