bool SetCommandLines( QtMsBuildContainer qtMsBuild, IEnumerable <string> configurations, IEnumerable <XElement> customBuilds, string itemType) { var query = from customBuild in customBuilds let itemName = customBuild.Attribute("Include").Value from configName in configurations from command in customBuild.Elements(ns + "Command") let commandLine = command.Value where command.Attribute("Condition").Value == string.Format( "'$(Configuration)|$(Platform)'=='{0}'", configName) select new { customBuild, itemName, configName, commandLine }; foreach (var row in query) { XElement item; row.customBuild.Add(item = new XElement(ns + itemType, new XAttribute("Include", row.itemName), new XAttribute("ConfigName", row.configName))); if (!qtMsBuild.SetCommandLine(itemType, item, row.commandLine)) { return(false); } } return(true); }
bool SetCommandLines( QtMsBuildContainer qtMsBuild, IEnumerable <XElement> configurations, IEnumerable <XElement> customBuilds, string itemType, string workingDir) { var query = from customBuild in customBuilds let itemName = customBuild.Attribute("Include").Value from config in configurations from command in customBuild.Elements(ns + "Command") let commandLine = command.Value where command.Attribute("Condition").Value == string.Format( "'$(Configuration)|$(Platform)'=='{0}'", (string)config.Attribute("Include")) select new { customBuild, itemName, config, commandLine }; using (var evaluator = new MSBuildEvaluator(this[Files.Project])) { foreach (var row in query) { XElement item; row.customBuild.Add(item = new XElement(ns + itemType, new XAttribute("Include", row.itemName), new XAttribute("ConfigName", (string)row.config.Attribute("Include")))); var configName = (string)row.config.Element(ns + "Configuration"); var platformName = (string)row.config.Element(ns + "Platform"); var commandLine = row.commandLine .Replace(Path.GetFileName(row.itemName), "%(Filename)%(Extension)", StringComparison.InvariantCultureIgnoreCase) .Replace(configName, "$(Configuration)", StringComparison.InvariantCultureIgnoreCase) .Replace(platformName, "$(Platform)", StringComparison.InvariantCultureIgnoreCase); evaluator.Properties.Clear(); foreach (var configProp in row.config.Elements()) { evaluator.Properties.Add(configProp.Name.LocalName, (string)configProp); } if (!qtMsBuild.SetCommandLine(itemType, item, commandLine, evaluator)) { return(false); } } } return(true); }