Example #1
0
        /// <summary>
        /// Handles the generic message raised event.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="messageArgs">The <see cref="BuildMessageEventArgs"/> instance containing the event data.</param>
        private void HandleMessageRaised(object sender, BuildMessageEventArgs messageArgs)
        {
            const string taskAssemblyPattern = "Using \"(?<task>.+)\" task from (assembly|the task factory) \"(?<assembly>.+)\"\\.";

            // Task Input / Outputs
            if (messageArgs.Message.StartsWith(TaskParameterMessagePrefix))
            {
                _build.AddTaskParameter(messageArgs, TaskParameterMessagePrefix);
            }
            else if (messageArgs.Message.StartsWith(OutputItemsMessagePrefix))
            {
                _build.AddTaskParameter(messageArgs, OutputItemsMessagePrefix);
            }
            else if (messageArgs.Message.StartsWith(OutputPropertyMessagePrefix))
            {
                _build.AddTaskParameter(messageArgs, OutputPropertyMessagePrefix);
            }

            // Item / Property groups
            else if (messageArgs.Message.StartsWith(PropertyGroupMessagePrefix))
            {
                _build.AddPropertyGroup(messageArgs, PropertyGroupMessagePrefix);
            }
            else if (messageArgs.Message.StartsWith(ItemGroupIncludeMessagePrefix))
            {
                _build.AddItemGroup(messageArgs, ItemGroupIncludeMessagePrefix);
            }
            else if (messageArgs.Message.StartsWith(ItemGroupRemoveMessagePrefix))
            {
                _build.AddItemGroup(messageArgs, ItemGroupRemoveMessagePrefix);
            }
            else
            {
                // This was command line arguments for processEvent task
                var args = messageArgs as TaskCommandLineEventArgs;
                if (args != null)
                {
                    _build.AddCommandLine(args);
                    return;
                }

                // A task from assembly message (parses out the task name and assembly path).
                var match = Regex.Match(messageArgs.Message, taskAssemblyPattern);
                if (match.Success)
                {
                    _build.SetTaskAssembly(match.Groups["task"].Value, match.Groups["assembly"].Value);
                }
                else
                {
                    // Just processEvent generic log message or something we currently don't handle in the object model.
                    _build.AddMessage(messageArgs, messageArgs.Message);
                }
            }
        }