public override bool Execute() { LoadConfiguration(); List <string> targetFrameworks = new List <string>(); foreach (string buildConfiguration in BuildConfigurations.Where(c => !string.IsNullOrWhiteSpace(c))) { // parse the specified configuration applying any independent properties from the BuildConfiguration. Configuration configuration = ConfigurationFactory.ParseConfiguration(buildConfiguration); if (!configuration.GetProperties().TryGetValue("TargetFramework", out string targetFramework)) { Log.LogError($"Could not derive a TargetFramework from BuildConfiguration '{buildConfiguration}'."); } if (!targetFrameworks.Contains(targetFramework)) { targetFrameworks.Add(targetFramework); } } TargetFrameworks = string.Join(";", targetFrameworks); return(!Log.HasLoggedErrors); }
public override bool Execute() { LoadConfiguration(); Dictionary <Configuration, Configuration> supportedProjectConfigurations = SupportedConfigurations.Where(c => !string.IsNullOrWhiteSpace(c)) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(c => ConfigurationFactory.ParseConfiguration(c)) .ToDictionary(c => c, Configuration.CompatibleComparer); var bestConfigurations = new List <ITaskItem>(); foreach (var configurationItem in Configurations) { var buildConfiguration = ConfigurationFactory.ParseConfiguration(configurationItem.ItemSpec); var compatibleConfigurations = ConfigurationFactory.GetCompatibleConfigurations(buildConfiguration, DoNotAllowCompatibleValues); Configuration supportedProjectConfiguration = null; var bestConfiguration = compatibleConfigurations.FirstOrDefault(c => supportedProjectConfigurations.TryGetValue(c, out supportedProjectConfiguration)); if (bestConfiguration == null) { Log.LogMessage(LogImportance.Low, $"Could not find any applicable configuration for '{buildConfiguration}' among projectConfigurations {string.Join(", ", supportedProjectConfigurations.Select(c => c.ToString()))}"); Log.LogMessage(LogImportance.Low, $"Compatible configurations: {string.Join(", ", compatibleConfigurations.Select(c => c.ToString()))}"); } else { if (supportedProjectConfiguration.IsPlaceHolderConfiguration) { Log.LogMessage($"Skipped configuration: {supportedProjectConfiguration.ToString()} because was marked as a placeholder configuration"); continue; } Log.LogMessage(LogImportance.Low, $"Chose configuration {bestConfiguration}"); var bestConfigurationItem = new TaskItem(bestConfiguration.ToString(), (IDictionary)bestConfiguration.GetProperties()); // preserve metadata on the configuration that selected this configurationItem.CopyMetadataTo(bestConfigurationItem); // preserve the configuration that selected this bestConfigurationItem.SetMetadata("BuildConfiguration", configurationItem.ItemSpec); foreach (var additionalProperty in buildConfiguration.GetProperties()) { bestConfigurationItem.SetMetadata("BuildConfiguration_" + additionalProperty.Key, additionalProperty.Value); } bestConfigurations.Add(bestConfigurationItem); } } BestConfigurations = bestConfigurations.ToArray(); return(!Log.HasLoggedErrors); }
public override bool Execute() { LoadConfiguration(); var buildConfiguration = ConfigurationFactory.ParseConfiguration(BuildConfiguration); var normalizedConfigurations = new List <ITaskItem>(); foreach (var configurationItem in Configurations.Where(c => !string.IsNullOrWhiteSpace(c.ItemSpec))) { // parse the specified configuration applying any independent properties from the BuildConfiguration. var configuration = ConfigurationFactory.ParseConfiguration(configurationItem.ItemSpec, baseConfiguration: buildConfiguration); // reuse original item as we must preserve the OriginalItemSpec metadata configurationItem.ItemSpec = configuration.ToFullString(); normalizedConfigurations.Add(configurationItem); } NormalizedConfigurations = normalizedConfigurations.ToArray(); return(!Log.HasLoggedErrors); }