コード例 #1
0
        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);
        }
コード例 #2
0
        List <CustomBuildEval> EvaluateCustomBuild()
        {
            var eval = new List <CustomBuildEval>();

            var pattern = new Regex(@"{([^}]+)}{([^}]+)}{([^}]+)}{([^}]+)}{([^}]+)}");

            var projConfigs = this[Files.Project].xml
                              .Elements(ns + "Project")
                              .Elements(ns + "ItemGroup")
                              .Elements(ns + "ProjectConfiguration");

            using (var evaluator = new MSBuildEvaluator(this[Files.Project])) {
                foreach (var projConfig in projConfigs)
                {
                    evaluator.Properties.Clear();
                    foreach (var configProp in projConfig.Elements())
                    {
                        evaluator.Properties.Add(configProp.Name.LocalName, (string)configProp);
                    }

                    var expandedValue = evaluator.ExpandString(
                        "@(CustomBuild->'" +
                        "{%(Identity)}" +
                        "{%(AdditionalInputs)}" +
                        "{%(Outputs)}" +
                        "{%(Message)}" +
                        "{%(Command)}')");

                    foreach (Match cbEval in pattern.Matches(expandedValue))
                    {
                        eval.Add(new CustomBuildEval
                        {
                            ProjectConfig    = (string)projConfig.Attribute("Include"),
                            Identity         = cbEval.Groups[1].Value,
                            AdditionalInputs = cbEval.Groups[2].Value,
                            Outputs          = cbEval.Groups[3].Value,
                            Message          = cbEval.Groups[4].Value,
                            Command          = cbEval.Groups[5].Value,
                        });
                    }
                }
            }

            return(eval);
        }
コード例 #3
0
        string CustomBuildMocInput(XElement cbt)
        {
            var commandLine = (string)cbt.Element(ns + "Command");
            Dictionary <QtMoc.Property, string> properties;

            using (var evaluator = new MSBuildEvaluator(this[Files.Project])) {
                if (!QtMsBuildContainer.QtMocInstance.ParseCommandLine(
                        commandLine, evaluator, out properties))
                {
                    return((string)cbt.Attribute("Include"));
                }
            }
            string ouputFile;

            if (!properties.TryGetValue(QtMoc.Property.InputFile, out ouputFile))
            {
                return((string)cbt.Attribute("Include"));
            }
            return(ouputFile);
        }